需要C#ParseExact语法的帮助以及在时区之间移动

时间:2011-04-20 15:49:48

标签: 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. 将美国东部时间2011年4月18日19:30转为日期时间
  2. 将EDT时区转换为UTC时间。
  3. 以DateTime对象结束。
  4. 代码是什么,巫师?

2 个答案:

答案 0 :(得分:0)

我不确定你到底挂了什么。听起来您已成功将字符串解析为DateTime

要将值转换为UTC,请调用ToUniversalTime()方法。请注意,这将假设当前时间值相对于系统的当前时区。

ToUniversalTime()会转换为DateTime值。

答案 1 :(得分:0)

好吧,如果它总是将在东部夏令时,你可以做类似的事情:

// 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的TimeZoneInfo(在夏令时开启时变为EDT)以阻止查找。

如果字符串可以用代表某个任意时区的三字母代码结束,那么它会变得更加困难,因为它们有很多约定,其中没有一个(AFAIK)是目前由.NET支持。您最好的选择是首先从代码构建查询到相关的TimeZoneInfo(可能通过Id属性),之后您可以像往常一样使用TimeZoneInfo.ConvertTime进行转换。