DateTime を UTC から別のタイムゾーンに変換するために、このメソッドを作成しました
public static DateTime GetDateTimeFromUtcTo(string timeZoneName, DateTime time)
{
DateTime newDateTime = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);
TimeZoneInfo newTzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
bool isDaylight = newTzi.IsDaylightSavingTime(time);
TimeZoneInfo gmtTzi = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
if (!gmtTzi.Equals(newTzi))
{
newDateTime = TimeZoneInfo.ConvertTime(newDateTime, gmtTzi, newTzi);
}
if (isDaylight)
{
newDateTime = newDateTime.AddHours(1);
}
return newDateTime;
}
timeZoneName
= "E. South America Standard Time" (--03:00 GMT) and time
= "16/05/2013 20:00:00" (UTC time) の場合、このメソッドは正しく機能しません。
正しい日時は「16/05/2013 17:00:00」でなければなりませんが、「16/05/2013 16:00:00」となります。なんで?