首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该使用什么数据类型来读取年度、月和年-周值?c#

我应该使用什么数据类型来读取年度、月和年-周值?c#
EN

Stack Overflow用户
提问于 2013-11-19 17:25:38
回答 4查看 1.7K关注 0票数 1

技术是winforms,使用c#,数据库是SQlite。

我从DB获取值,将它们转换为列表,然后用这些列表填充列表视图。

我有两栏的日期。一个值的格式是年份和月份(YYYY),另一个是年份和周(YYYY)。

问题:

但是在列表视图中,这些值在它们之间以斜线显示,即2001年1月为2001年1月1日凌晨12:00。2002年的第31周为2002年3月1日凌晨12:00。

我不想要输出的时间或斜线。(前两个列表是listview中的输出,其中有前面提到的错误。第二列是数据的外观)。

问题是由引起的:我使用DateTime数据类型来存储这些列的值。是否有任何数据类型将只输出这些值的年度月和年度周格式,而不是显示斜杠和时间。如果我尝试使用int,这些列甚至不会被读取,所以不能使用。

代码:(只关注yyyymm部分)

代码语言:javascript
运行
复制
 string sql6 = "select YYMM, TotalTrans  from t2 where cast(TotalTrans as int) < 1000";
       SQLiteCommand command3 = new SQLiteCommand(sql6, sqlite_conn);


       SQLiteDataReader reader3 = command3.ExecuteReader();

       while (reader3.Read())
       {

           int TotalTrans;
           DateTime yyyymm;  //Right here:

           if (DateTime.TryParse(reader3["YYMM"].ToString(), out yyyymm) && int.TryParse(reader3["TotalTrans"].ToString(), out TotalTrans))
           {
               YYMM.Add(yyyymm);
               TotalTransIrregularities.Add(TotalTrans);
           }
       }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-19 17:40:25

对于YYMM列,可以像使用一样使用DateTime。当以字符串的形式输出它时,应该使用yyyy-MM格式。

您的YYWW列更复杂,因为DateTime不支持几周的解析。我建议您创建自己的类型,并以ISO标准方式显示它,例如2002-W31。这种类型可能如下所示:

代码语言:javascript
运行
复制
public struct YearWeek
{
    private static readonly Regex parseRegex =
                            new Regex(@"^(?<year>\d{4})-W?(?<week>\d{2})$");
    public int Year { get; private set; }
    public int Week { get; private set; }
    public YearWeek(int year, int week) : this()
    {
        this.Year = year;
        this.Week = week;
    }
    public static bool TryParse(string s, out YearWeek result)
    {
        var match = parseRegex.Match(s);
        if (match.Success)
        {
            result = new YearWeek(int.Parse(match.Groups["year"].Value),
                                int.Parse(match.Groups["week"].Value));
            return true;
        }
        else
        {
            result = default(YearWeek);
            return false;
        }
    }
    public static YearWeek Parse(string s)
    {
        YearWeek result;
        if (TryParse(s, out result))
            return result;
        else
            throw new ArgumentException("s");
    }
    public override string ToString()
    {
        return string.Format("{0:0000}-W{1:00}", Year, Week);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-11-19 17:39:06

您可以在ToString()类型上使用DateTime函数来获得所需的字符串格式。

示例:

代码语言:javascript
运行
复制
DateTime dt=DateTime.Now;
dt.ToString("yyyy"); => gives you year => 2013
dt.ToString("MM");=>gives you month=>11
dt.ToString("dd");=>gives you Date=>19

解决方案1:以yyyy-MM格式获取Date

代码语言:javascript
运行
复制
String yearmonth=yyyymm.ToString("yyyy-MM");

解决方案2:以yyyy-WW格式获取Date

为了获得WeekNumber,您需要使用Calendar。您可以在GetWeekOfYear()对象上调用Calendar方法来获取当前的Week Number

代码语言:javascript
运行
复制
using System.Globalization;
Calendar myCal = CultureInfo.InvariantCulture.Calendar;
DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
String yearweek = yyyymm.ToString("yyyy") +"-"+ myCal.GetWeekOfYear(yyyymm, dfi.CalendarWeekRule, dfi.FirstDayOfWeek).ToString();
票数 1
EN

Stack Overflow用户

发布于 2013-11-19 17:41:22

可以在DateTime.ToString(...)方法中使用格式字符串。使用本文编写格式字符串http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx。要从自定义日期时间字符串中获取DateTime结构,请使用DateTime.ParseExact(...)方法。

例如,年月格式字符串将为"yyyy-MM"

至于周数,情况就有点困难了。没有周号格式字符串,但您可以轻松地从日期获得它。请看这个问题的答案:一年的周数(日期格式) --它拥有您所需的一切。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20078004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档