【发布时间】:2017-06-27 19:25:25
【问题描述】:
我正在尝试将 DateTime 对象转换为 ISO8601 字符串,但总是得到错误的结果。我在stackoverflow上环顾四周,但找不到正确的解决方案。
我从“2017-06-26T20:45:00.070Z”的日期时间字符串开始,它由 newtonsoft 从 json 反序列化并转换为 C# 中的 DateTime 对象,相当于:
var theTime = new DateTime(2017, 6, 26, 20, 45, 00, 70, DateTimeKind.Utc);
现在我需要将那个时间转换回它的原始 UTC 格式字符串以在另一个算法中使用它,但是我尝试的每次转换都不会将它返回到原始字符串。不知道我做错了什么。
我试过了:
var newTime = theTime.UtcNow.ToString("o");
// returns "2017-06-26T00:00:00.0000000Z"
var newTime2 = theTime.Date.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.sssZ");
// returns "2017-06-26T00:00:00.00Z"
我做错了什么?我想要等效于 js 将使用 toISOString() 执行的操作,这是我在 newTime2 日期时间格式中列出的内容,但它也没有显示时间。
谢谢!
【问题讨论】:
-
那么你得到了什么结果?我强烈建议明确指定不变的文化,你的
.sss应该是.fff,但除此之外它看起来还可以。 -
我检查了“其他”列表,但“yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz”给我一个运行时错误,指出它需要使用 Z,而不是一个z。不太明白错误信息。但如前所述,我没有得到“时间”。并且格式与原始 js 转换字符串不太一样。
-
根据 Max,看起来错过时间的原因是我无缘无故地添加日期。但是我仍然在毫秒内再次复制确切的字符串。
-
这个问题的替代方法是如何让 Newtonsoft 不将日期时间字符串转换为它似乎自动执行的日期时间。所以我可以使用原始字符串。