如何正确解析 DateTime 字符串
How to properly parse DateTime string
我有输入日期时间字符串,如下所示:2015-01-28 17:55:43
。问题是它们处于 UTC+8(或其他一些班次)。无论软件运行的时区如何,我都需要将这些字符串正确解析和处理为 UTC。
我的问题是 DateTime.Parse
returns 本地时间,而不是 UTC 时间,而且我没有看到在解析字符串时指定 shift 的方法。
我目前对此的解决方案如下所示:
add.LastUpdatedTime = new DateTime((DateTime.Parse(text) - new TimeSpan(0, 8, 0, 0)).Ticks,DateTimeKind.Utc);
这很丑陋,我不确定它是否适用于所有情况。
有更好的方法吗?
鉴于您有本地时间和偏移量,我建议在 DateTimeOffset
中表示它。所以:
DateTime localTime = DateTime.ParseExact(...);
DateTimeOffset offsetTime = new DateTimeOffset(localTime, offset);
那么你仍然知道当地时间,但你可以在需要时获得等效的 UTC。基本上它会保留您拥有的所有信息。
作为替代方案,您可以使用 Noda Time,它代表 OffsetDateTime
中的相同信息。您将使用 LocalDateTimePattern
将值解析为 LocalDateTime
,然后使用 WithOffset
方法转换为适当的 OffsetDateTime
.
编写示例程序,输出如下:
Console.WriteLine(DateTime.Now.ToString("o"));
查看该格式,并将其用作修补传入字符串时间的模板。有关更多可行的字符串选项,请查看 DateTime.ToString Method ...我敢打赌那里有一些变体将为您解决(例如,使用末尾带有 "zzz" 的格式,这将生成本地时间的 UTC 偏移量,例如 "HH:mm:ss.ffffzzz",如链接页面所示)。
另请查看示例中的 DateTime.Parse Method ...请注意字符串“2008-09-15T09:30:41.7752486-07:00”,其中包含 -7 的 UTC 偏移量(America/Denver ) 表示对解析有效。
我有输入日期时间字符串,如下所示:2015-01-28 17:55:43
。问题是它们处于 UTC+8(或其他一些班次)。无论软件运行的时区如何,我都需要将这些字符串正确解析和处理为 UTC。
我的问题是 DateTime.Parse
returns 本地时间,而不是 UTC 时间,而且我没有看到在解析字符串时指定 shift 的方法。
我目前对此的解决方案如下所示:
add.LastUpdatedTime = new DateTime((DateTime.Parse(text) - new TimeSpan(0, 8, 0, 0)).Ticks,DateTimeKind.Utc);
这很丑陋,我不确定它是否适用于所有情况。
有更好的方法吗?
鉴于您有本地时间和偏移量,我建议在 DateTimeOffset
中表示它。所以:
DateTime localTime = DateTime.ParseExact(...);
DateTimeOffset offsetTime = new DateTimeOffset(localTime, offset);
那么你仍然知道当地时间,但你可以在需要时获得等效的 UTC。基本上它会保留您拥有的所有信息。
作为替代方案,您可以使用 Noda Time,它代表 OffsetDateTime
中的相同信息。您将使用 LocalDateTimePattern
将值解析为 LocalDateTime
,然后使用 WithOffset
方法转换为适当的 OffsetDateTime
.
编写示例程序,输出如下:
Console.WriteLine(DateTime.Now.ToString("o"));
查看该格式,并将其用作修补传入字符串时间的模板。有关更多可行的字符串选项,请查看 DateTime.ToString Method ...我敢打赌那里有一些变体将为您解决(例如,使用末尾带有 "zzz" 的格式,这将生成本地时间的 UTC 偏移量,例如 "HH:mm:ss.ffffzzz",如链接页面所示)。
另请查看示例中的 DateTime.Parse Method ...请注意字符串“2008-09-15T09:30:41.7752486-07:00”,其中包含 -7 的 UTC 偏移量(America/Denver ) 表示对解析有效。