更改时间时 DateTime ParseExact 不起作用
DateTime ParseExact not working when changing time
在我更改传递到解析方法的日期时间之前,我无法弄清楚为什么我的日期被正确解析。
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
的输出保持不变,但未正确解析。我的解析有没有做错什么?我很困惑,因为格式似乎完全一样?
您需要将传入格式更改为 yyyy-MM-ddTHH:mm:ss+00:00
。
区别是HH
。大写 H 表示 24 小时制或 "military time".
否则,它正在尝试解析不存在的第 23 小时。
有关其他格式的更多详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
将 hh
更改为 HH
说明符 可以 解决您的问题,但由于您的字符串具有 UTC offset value, I would prefer to parse it to DateTimeOffset
而不是 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}
,您可以使用它的 .DateTime
property 来获取它所代表的 DateTime
值。
var dateValueToTryParse = dto.DateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
这将生成 05/02/2016
作为结果。
在我更改传递到解析方法的日期时间之前,我无法弄清楚为什么我的日期被正确解析。
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
的输出保持不变,但未正确解析。我的解析有没有做错什么?我很困惑,因为格式似乎完全一样?
您需要将传入格式更改为 yyyy-MM-ddTHH:mm:ss+00:00
。
区别是HH
。大写 H 表示 24 小时制或 "military time".
否则,它正在尝试解析不存在的第 23 小时。
有关其他格式的更多详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
将 hh
更改为 HH
说明符 可以 解决您的问题,但由于您的字符串具有 UTC offset value, I would prefer to parse it to DateTimeOffset
而不是 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}
,您可以使用它的 .DateTime
property 来获取它所代表的 DateTime
值。
var dateValueToTryParse = dto.DateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
这将生成 05/02/2016
作为结果。