如何初始化DateTime字段?

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

我必须将一些DateTime字段初始化为一个对象,但我有一些问题。

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

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

但Visual Studio会将其标记为错误

字符文字中的字符太多

我错过了什么? 怎么解决?

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

或者也许是这样的

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

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

两者都是一样的….

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); 

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

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

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

您使用的字符文字''只能包含一个字符。 如果你想使用字符串文字而使用""

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); } 

不幸的是,C#不支持Date文字。 您应该更改代码并使用new DateTime(..)实例化DateTime对象,正如托马斯在他的回答中所例证的那样。

仅仅为了扩展这个主题:VB.NET使用#字符支持日期文字(具有讽刺意味)。 这是从MSDN文档中表达它们的方式:

 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. 

如果您搜索到的错误,您会发现 :

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

所以你会尝试:

 DateTime foo = "2014,02,20"; 

产量:

无法将类型’string’隐式转换为’System.DateTime’

现在,如果您搜索错误,您会发现 :

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

用这个

// 年月日

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

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

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