Я выполняю этот фрагмент кода в LINQPad.
DateTime dt = new DateTime(2011, 2, 1,15,0,0);
dt.Dump();
TimeZoneInfo timeZoneId = TimeZoneInfo.FindSystemTimeZoneById("Samoa Standard Time");
//timeZoneId.GetAdjustmentRules().Dump();
var x = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(dt, DateTimeKind.Unspecified), timeZoneId);
x.Dump();
Результат:
01.02.2011 15:00:00
02.02.2011 1:00:00
Когда я иду на Преобразователь времени по Гринвичу , чтобы проверить дважды, возвращаемое значение: 1.02.2011 2:00:00 AM. Почему функция .Net возвращает значение, отличное от другого сайта. Кто прав? Мы только что перешли на летнее время (я не проверял его перед переключением), это имеет значение?
Наш QA обнаружил список несоответствий:
ID GMT Offset Name DateTime Tested Conversion Result Correct GMT
(Value in DB)
16 -11:00 Samoa 2/1/2011 3:00 PM 2/2/2011 1:00 AM 2/2/2011 2:00 AM
19 +12:00 Auckland, Wellington 2/1/2011 3:00 PM 2/1/2011 2:00 AM 2/1/2011 3:00 AM
20 +12:00 Fiji 2/1/2011 3:00 PM 2/1/2011 2:00 AM 2/1/2011 3:00 AM
23 +10:00 Canberra, 2/1/2011 3:00 PM 2/1/2011 4:00 AM 2/1/2011 5:00 AM
Melbourne, Sydney
25 +10:00 Hobart 2/1/2011 3:00 PM 2/1/2011 4:00 AM 2/1/2011 5:00 AM
27 +09:30 Adelaide 2/1/2011 3:00 PM 2/1/2011 4:30 AM 2/1/2011 5:30 AM
68 +01:00 Windhoek 2/1/2011 3:00 PM 2/1/2011 1:00 PM 2/1/2011 2:00 PM
80 -03:00 Brasilia 2/1/2011 3:00 PM 2/1/2011 5:00 PM 2/1/2011 6:00 PM
84 -03:00 Montevideo 2/1/2011 3:00 PM 2/1/2011 5:00 PM 2/1/2011 6:00 PM
88 -04:00 Cuiaba 2/1/2011 3:00 PM 2/1/2011 6:00 PM 2/1/2011 7:00 PM
89 -04:00 Santiago 2/1/2011 3:00 PM 2/1/2011 6:00 PM 2/1/2011 7:00 PM