日期时间解析更改时间时精确不起作用

本文关键字:时间 不起作用 日期 | 更新日期: 2023-09-27 18:32:02

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

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 小时制或"军事时间"。

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

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

hh更改为HH说明符可以解决您的问题,但由于您的字符串具有 UTC 偏移值,我宁愿将其解析为 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属性来获取它表示的DateTime值。

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

这将产生05/02/2016结果。