我有一个以UTC(字符串类型)进来的UTC时间戳。我希望将此时间戳转换为东部时间。问题是当我在UTC时间戳上调用DateTime.Parse或Convert.ToDateTime时,它将它转换为我的本地时间,即中央时间。将UTC转换为东部时区
如何获取字符串时间戳并将其转换为东部时间,而不管其运行的服务器的本地时间?
我有一个以UTC(字符串类型)进来的UTC时间戳。我希望将此时间戳转换为东部时间。问题是当我在UTC时间戳上调用DateTime.Parse或Convert.ToDateTime时,它将它转换为我的本地时间,即中央时间。将UTC转换为东部时区
如何获取字符串时间戳并将其转换为东部时间,而不管其运行的服务器的本地时间?
我会尝试剖析你的问题,但下一次请出示一些代码,这样每个人都可以看到究竟是什么你的意思更清楚。
我有一个UTC时间戳来UTC(字符串类型)。
好吧,我假定你的意思是这样的:
string utcString = "2014-02-25T12:34:56.000Z";
这是一个ISO-8601 UTC时间戳。如果是其他格式,请在评论中告诉我,我会相应地更新答案。
...问题是,当我打电话
DateTime.Parse
或Convert.ToDateTime
在UTC时间戳,它是将其转换为我的本地时间,这是中部时间。
DateTime utcDateTime = DateTime.Parse(utcString,
CultureInfo.InvariantCulture,
DateTimeStyles.RoundtripKind);
的RoundtripKind
风格告诉解析器查找输入字符串“厚道”的信息,如指示UTC的Z
。结果DateTime
将具有原始值,并且它的.Kind
属性设置为DateTimeKind.Utc
。
...我想将此时间戳转换为东部时间。
既然您有UTC DateTime
,那么您可以使用TimeZoneInfo
类轻松转换它。
TimeZoneInfo easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById(
"Eastern Standard Time");
DateTime easternDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime,
easternTimeZone);
就是这样。结果是DateTime
包含美国东部时区的当地时间。由于时区信息未与DateTime
对象一起携带,因此实物为Unspecified
。
另请注意,“东部标准时间”是指整个美国东部时区,包括EST和EDT。
你精美地解析了我写得不好的问题。谢谢你,先生。 – user1373121
夏令时呢?对不起,如果业余问题 – donstack
@donstack - 没问题。以上示例已经说明了夏令时。 “东部标准时间”的Windows时区ID名称很差,应该只是“东部时间”。它包含了EST和EDT。有关更多示例,请参见[时区标记wiki](http://stackoverflow.com/tags/timezone/info)。 –
Take a look here at the documentation.
基本上你需要使用TimeZoneInfo.FindSystemTimeZoneById("<Timezone>");
然后使用该作为ConvertTime
函数的第三个参数。参数2是您当前的时区。
DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
Console.WriteLine("{0} {1} is {2} local time.",
hwTime,
hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName,
TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("Registry data on the Hawaiian STandard Time zone has been corrupted.");
}
只有链接的答案是不鼓励的... –
我发现了一个方便的解决方案:
var e_europe = TimeZoneInfo.FindSystemTimeZoneById("E. Europe Standard Time");
var utcnow = DateTime.UtcNow;
Console.WriteLine(utcnow.ToString());
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(utcnow, e_europe).ToString());
它打印
2/26/2014 1:03:43 AM
2/26/2014 3:03:43 AM
我不确定,但你可以尝试与文化。看看这个:http://msdn.microsoft.com/en-us/library/5hh873ya%28v=vs.90%29.aspx – George
@George - 文化与时区无关。他们不会影响他们一点。 –