DateTime ParseExact在更改时间时不起作用

时间:2016-01-25 23:47:51

标签: c# parsing datetime datetime-format

我无法弄清楚为什么我的日期被正确解析,直到我更改传递到解析方法的日期的时间。

var parsedDate = DateTime.ParseExact("2016-02-05T07:00:00+00:00", "yyyy-MM-ddThh:mm:ss+00:00", CultureInfo.InvariantCulture);
dateValueToTryParse = parsedDate.ToString("dd/MM/yyyy");

输出所需的结果,我得到05/02/2016。但是,如果我将传入的字符串更改为:

2016-02-19T23:59:00+00:00

dateValueToTryParse的输出保持不变,并且未正确解析。我在解析时做了什么特别错误的事吗?我很困惑,因为格式看起来完全一样吗?

2 个答案:

答案 0 :(得分:2)

您需要将传入格式更改为yyyy-MM-ddTHH:mm:ss+00:00

差异是HH。资本H表示24小时制或“34”军事时间"。

否则,它正在尝试解析不存在的第23小时。

有关其他格式的更多详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

答案 1 :(得分:0)

hh更改为HH说明符可以解决您的问题但由于您的字符串具有UTC offset值,我更愿意将其解析为{{3对于一致性而不是DateTime

var dto = DateTimeOffset.ParseExact("2016-02-05T23:00:00+00:00", 
                                    "yyyy-MM-ddTHH:mm:sszzz",
                                    CultureInfo.InvariantCulture);

现在,DateTimeOffset{05.02.2016 23:00:00 +00:00},您可以使用DateTimeOffset来获取由其代表的DateTime值。

var dateValueToTryParse = dto.DateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

结果会产生05/02/2016