好的,我决定让 Stackoverflow 的魔力为我工作!
我有一个格式为“2011 年 4 月 18 日 19:30 EDT”的日期,我需要将其推送到 C# 中的 DateTime 对象中。一个 caviat,我也想将它转移到 UTC。显然,当 DST 结束时,它会以 EST 的形式出现。
我知道我需要这样的声明:
DateTime.ParseExact("Apr 18 2011 19:30 EDT", "MMM DD yyyy something something ", CultureInfo.InvariantCulture, DateTimeStyles.None, out convertedDate);
但是将其转换为 UTC 超出了我的知识水平。
总而言之,我需要:
- 将 Apr 18 2011 19:30 EDT 转换为 DateTime
- 将 EDT 时区转换为 UTC 时间。
- 以 DateTime 对象结束。
代码是什么,向导?
最佳答案
好吧,如果它总是要在东部夏令时,你可以这样做:
// Parse string. We don't need escaping since E,D and T
// are not considered special characters by ParseExact.
var dateTimeInEasternTime = DateTime.ParseExact("Apr 18 2011 19:30 EDT",
"MMM dd yyyy HH:mm EDT",
CultureInfo.InvariantCulture);
// Convert from the relevant timezone to UTC.
var dateTimeInUTC = TimeZoneInfo.ConvertTime
(dateTimeInEasternTime,
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"),
TimeZoneInfo.Utc);
您可以缓存表示 EST(夏令时开启时变为 EDT)的 TimeZoneInfo
以防止查找。
如果字符串可以以表示某个任意 时区的三个字母代码结尾,这将变得更加困难,因为它们有很多约定,但没有一个 (AFAIK)目前由 .NET 支持。您最好的选择是首先构建从代码到相关 TimeZoneInfo
的查找(可能通过 Id
属性),然后您可以使用 TimeZoneInfo 进行转换.ConvertTime
像往常一样。
关于c# - 在 C# ParseExact 语法和时区之间移动方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733116/