【发布时间】:2016-07-06 12:19:13
【问题描述】:
我正在使用以下方法将utc datetime转换为其他时区对应的datetime
public string ConvertUTCDateTimetoUserDateTime(string utcDate)
{
DateTime userDateTime = new DateTime();
String displaydate = String.Empty;
try
{
destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById(TIMEZONE_ID);
DateTime returndt = Convert.ToDateTime(utcDate);
string strDate = String.Format("{0:" + DATE_FORMAT + " " + "HH:mm}", returndt);
sourceTimeZone = TimeZoneInfo.Utc;
string dateFormat = DATE_FORMAT + " " + "HH:mm";
DateTime unspecified = DateTime.ParseExact(strDate, dateFormat, CultureInfo.InvariantCulture);
userDateTime = TimeZoneInfo.ConvertTime(unspecified, sourceTimeZone, destinationTimeZone);
displaydate = userDateTime.ToString(DATE_FORMAT + " HH:mm");
}
catch (Exception ex)
{
}
return displaydate;
}
如果我将 '03/19/2016 18:48' 作为 UTC 日期和时区作为“大西洋标准时间”(UTC-4:00),那么它会将其转换为 '03/19/2016 15:48'这是大西洋夏令时(UTC-3:00)。为什么要考虑大西洋标准时间的 DST?并非大西洋时间的所有地方都考虑 DST。对于东部标准时间 (UTC-5:00) 和太平洋标准时间 (UTC-8:00),DST 的转换是正确的。但是为什么在大西洋时间的情况下会发生这种情况。对于大西洋夏令时间也没有 TimeZone ID。我可以通过检查它是否是 AST 来增加一小时,但是有没有更好的方法来处理 AST 和 ADT?
【问题讨论】: