好的,我决定让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已经超出了我的知识水平。
总而言之,我需要:
代码是什么,巫师?
答案 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
进行转换。