ASP.NET DateTime无法正确转换

时间:2017-11-08 11:42:21

标签: c# asp.net datetime

我在这里有这个日期:

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

2 个答案:

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