I'm currently using the following to convert a DataTime know to be in NZST to NZDT when applicable. I.e. The code will automatically determine if daylight savings should be applied.
public static DateTime DateTimeFromNzst(DateTime nzstDateTime)
{
// Known offset from UTC
TimeSpan nzstOffset = new TimeSpan(12, 0, 0);
DateTimeOffset dateTimeOffset = new DateTimeOffset(nzstDateTime, nzstOffset);
DateTimeOffset dateTimeOffsetConvertedToLocal = TimeZoneInfo.ConvertTime(dateTimeOffset, TimeZoneInfo.Local);
return dateTimeOffsetConvertedToLocal.DateTime;
}
It should also be possible to convert from UTC to the local timezone by adjusting the known UTC offset to 0.
public static DateTime DateTimeFromUtc(DateTime utcDateTime)
{
// Known offset from UTC
TimeSpan utcOffset = new TimeSpan();
DateTimeOffset dateTimeOffset = new DateTimeOffset(utcDateTime, utcOffset);
DateTimeOffset dateTimeOffsetConvertedToLocal = TimeZoneInfo.ConvertTime(dateTimeOffset, TimeZoneInfo.Local);
return dateTimeOffsetConvertedToLocal.DateTime;
}
