首页 > 解决方案 > 从 API 返回的日期有问题

问题描述

首先,我是新手级别的程序员,如果不清楚,我深表歉意。我正在访问的 API 返回“createdDate: 20190216T070519.000Z”或“EndTime: 20190217T190847.181Z”我不知道如何在 C# 中将其转换为 DateTime。

这是作为字符串返回的,我得到

字符串未被识别为有效的日期时间。

我尝试了类似的方法,但我无法知道源格式或 .000Z 代表什么,我怀疑它是一个时区。

DateTime.ParseExact(createdDate, "yyyyMMddpHHmmss.fffZ",CultureInfo.InvariantCulture);

也这样做了,认为它会有所帮助,但不确定如何处理该createdDate.Substring(16, 3)部分。

MessageBox.Show(createdDate.Substring(0, 8) +" @ "+ createdDate.Substring(9, 6) + " @ " + createdDate.Substring(16, 3));

只是看着它,它可能是一种 python 格式,%Y%m%dT%H%M%S.%fZ但不确定,因为我不熟悉 Python,但一些在线搜索让我觉得它很接近。似乎它也是时区,可能与 UTC 或其他东西有差异。我不希望我的程序有错误的日期时间信息,所以如果有人能帮我解决这个问题,那就太棒了。

标签: c#pythonvisual-studiodatetimetimezone

解决方案


Z 表示 UTC。如果有 UTC 以外的时区,通常会被指定为偏移量 -600 或类似的东西

至于您的日期解析,您很接近:

DateTime.ParseExact(createdDate,"yyyyMMddTHHmmss.fffK",CultureInfo.InvariantCulture)

C# 使用 K 代表“种类”,可以是 UTC 或本地或未定义

有些人很固执,会说您需要像这样将 T 放在单引号 'T' 中,

DateTime.ParseExact(createdDate,"yyyyMMdd'T'HHmmss.fffK",CultureInfo.InvariantCulture)

但老实说,我觉得这很混乱......


推荐阅读