如何初始化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.Split
和int.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);