【问题标题】:How to initialize a DateTime field?如何初始化 DateTime 字段?
【发布时间】:2014-03-21 08:16:16
【问题描述】:

我是 C# 的新手(我来自 Java),我有一个非常愚蠢的问题

我必须将一些 DateTime 字段初始化为一个对象,但这样做时遇到了一些问题。

特别是我试图以这种方式初始化这些字段:

mySmallVuln.Published = '1998,04,30';
mySmallVuln.LastUpdated = '2007,11,05';

但 Visual Studio 将其标记为错误

字符字面量中的字符过多

我错过了什么?如何解决?

【问题讨论】:

    标签: c# datetime


    【解决方案1】:
    mySmallVuln.Published = new DateTime(1998,04,30);
    

    或者像这样

    var date = DateTime.MinValue;
    if (DateTime.TryParse("1998/04/30", out date))
    {
        //Sucess...
        mySmallVuln.Published = date;
    }
    

    【讨论】:

      【解决方案2】:

      使用这个

      //年月日

      mySmallVuln.Published=new DateTime(2011,11,4);
      

      【讨论】:

        【解决方案3】:

        要初始化DateTime 值,您可以使用DateTime 构造函数:

        mySmallVuln.Published = new DateTime(1998,04,30);
        

        【讨论】:

          【解决方案4】:

          两者都是一样的......

          1

          mySmallVuln.Published = new DateTime(1998,04,30,0,0,0);
          mySmallVuln.LastUpdated = new DateTime(2007,11,05,0,0,0);
          

          2

          mySmallVuln.Published = new DateTime(1998,04,30);
          mySmallVuln.LastUpdated = new DateTime(2007,11,05);
          

          在第一种方法中,您可以在最后三个参数的参数中分别指定小时分钟和秒。

          【讨论】:

            【解决方案5】:

            你可以解析一个字符串,就像你的一样。或者你可以用数字实例化一个 DateTime 对象。

            DateTime date1 = new DateTime(1998, 04, 30);
            DateTime date2 = DateTime.ParseExact("1998,04,30", "yyyy,MM,dd", CultureInfo.InvariantCulture);
            

            【讨论】:

              【解决方案6】:

              您正在使用字符文字'',它只能包含一个字符。如果您想使用字符串文字,请改用""

              C# 不支持 DateTime-literals 而不是 VB.NET (#4/30/1998#)。

              除此之外,字符串不是DateTime。如果您有一个字符串,您需要先将其解析为DateTime

              string published = "1998,04,30";
              DateTime dtPublished = DateTime.ParseExact(published, "yyyy,MM,dd", CultureInfo.InvariantCulture);
              mySmallVuln.Published = dtPublished; 
              

              或者您可以通过构造函数创建DateTime

              DateTime dtPublished = new DateTime(1998, 04, 30);
              

              或者,由于您的字符串包含年、月和日作为字符串,使用String.Splitint.Parse

              string[] tokens = published.Split(',');
              if (tokens.Length == 3 && tokens.All(t => t.All(Char.IsDigit)))
              {
                  int year = int.Parse(tokens[0]);
                  int month = int.Parse(tokens[1]);
                  int day = int.Parse(tokens[2]);
                  dtPublished = new DateTime(year, month, day);
              }
              

              【讨论】:

                【解决方案7】:

                不幸的是,C# 不支持日期文字。您应该更改代码并使用 new DateTime(..) 实例化 DateTime 对象,正如 thomas 在他的回答中所举例说明的那样。

                只是为了扩展这个主题:VB.NET 支持使用 # 字符的日期文字(讽刺的是)。这就是它们的表达方式,来自MSDN documentation

                Dim d As Date
                d = # 8/23/1970 3:45:39AM #
                d = # 8/23/1970 #              ' Date value: 8/23/1970 12:00:00AM.
                d = # 3:45:39AM #              ' Date value: 1/1/1 3:45:39AM.
                d = # 3:45:39 #                ' Date value: 1/1/1 3:45:39AM.
                d = # 13:45:39 #               ' Date value: 1/1/1 1:45:39PM.
                d = # 1AM #                    ' Date value: 1/1/1 1:00:00AM.
                d = # 13:45:39PM #             ' This date value is not valid.
                

                【讨论】:

                  【解决方案8】:

                  如果你搜索你得到的错误,你会find:

                  这是因为,在 C# 中,单引号 ('') 表示(或封装)单个字符,而双引号 ("") 用于表示字符串。

                  所以你会尝试:

                  DateTime foo = "2014,02,20";
                  

                  产量:

                  无法将类型“字符串”隐式转换为“System.DateTime”

                  现在如果你搜索那个错误,你会find:

                  int StartYear = 2012;
                  int StartMonth = 06;
                  int StartDay = 15;
                  
                  DateTime dt = new DateTime(StartYear, StartMonth, StartDay);
                  

                  【讨论】:

                    【解决方案9】:
                     DateTime d = default(DateTime);
                    

                    默认关键字也适用于所有数据类型!

                    【讨论】:

                      猜你喜欢
                      • 2011-03-16
                      • 2010-12-27
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多