我在这里有这个日期:
DateTime RelevantDate = new DateTime(2017, 11, 13, 16, 0, 0, 0);
request.RelevantDate = Convert.ToDateTime(RelevantDate.ToString("o"));
我期待着:
2017-11-13T16:00:00-05:00
相反,我得到了:
2017-11-13T16:00:00
这确实需要采用以下格式:2017-11-13T16:00:00-05:00,我该怎么做? request.RelevantDate期待DateTime
如果我这样做:
request.RelevantDate = Convert.ToDateTime(DateTime.Now.ToString("o"));
它给了我正确的格式:
2017-11-08T06:43:39-05:00
答案 0 :(得分:6)
如果使用此构造函数创建DateTime
,则其Kind
属性为Unspecified
,即它既不是本地也不是UTC。
DateTime.Now
会返回DateTimeKind.Local
的对象,这就是将时区添加到.ToString("o")
输出的原因。
您可以使用其他构造函数,您可以明确地将类型设置为Local
,例如new DateTime(2017, 11, 13, 16, 0, 0, 0, DateTimeKind.Local)
。
这样,时区将出现在.ToString("o")
的输出中。
答案 1 :(得分:0)
如果要在DateTime格式化字符串中查看时区信息,则需要指定时区。
您可以使用此方法。 请看一下:
如果您想使用本地时区
DateTime RelevantDate = new DateTime(2017, 11, 13, 16, 0, 0, 0);
var DateTimeWithZone = TimeZoneInfo.ConvertTime(RelevantDate, TimeZoneInfo.Local);
如果您想使用自定义时区
DateTime RelevantDate = new DateTime(2017, 11, 13, 16, 0, 0, 0);
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
var DateTimeWithZone = TimeZoneInfo.ConvertTime(RelevantDate, timeZone);