c# - 在 C# ParseExact 语法和时区之间移动方面需要帮助

标签 c# datetime

好的,我决定让 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 超出了我的知识水平。

总而言之,我需要:

  1. 将 Apr 18 2011 19:30 EDT 转换为 DateTime
  2. 将 EDT 时区转换为 UTC 时间。
  3. 以 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/

相关文章:

c# - 不使用数据库或 .xml 文件存储敏感数据的最佳方法

c# - 能够在 WPF 网络浏览器中支持 Html5

c# - 自定义中间件导致 Blazor 服务器端页面停止工作

c# - 我可以避免使用非常大的 'switch' block 来访问 400 个程序代码块吗?

python - 带时区到纪元的日期时间

c# - phantomjsdriver 如何添加用户代理?

python - 无法使用 pd.to_datetime 转换为日期时间

datetime - 我如何 ffmpeg 遍历 10,000 多个带有日期时间戳的文件

javascript - document.getElementById 的日期时间不起作用

python - 如何找到 Pandas 中两个日期时间之间的差异?