Я немного боролся с этим, поэтому перейду к SO.
У меня есть приложение, в котором мне нужно анализировать строки в даты и время. Строки выглядят следующим образом:
"201503131557"
(они всегда будут в формате «ггггММддЧЧмм») и всегда будут соответствовать центральному стандартному времени (или центральному летнему времени в зависимости от даты), даже если они этого не указывают.
Когда я анализирую их, я понимаю, что оно преобразует их в местное время. Я использую Azure PaaS и не хочу менять его для работы в CST только для поддержки этой операции.
Как написать код, работающий как локально, так и в Azure PaaS, который будет правильно анализировать эти даты в DateTimes, устанавливая для часового пояса CST?
Вот быстрый модульный тест, который я написал, чтобы доказать ответ Мэтта Джонсона.
[TestMethod]
public void DateTests()
{
var unSpecDt = DateTime.ParseExact("201503131557", "yyyyMMddHHmm", CultureInfo.InvariantCulture);
var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcDt = TimeZoneInfo.ConvertTimeToUtc(unSpecDt, tz);
var offset = tz.GetUtcOffset(unSpecDt);
var dto =new DateTimeOffset(unSpecDt, offset);
var cstDt = dto.DateTime;
Assert.IsTrue(cstDt.Hour - utcDt.Hour == offset.Hours);
}
Подробнее здесь: https://stackoverflow.com/questions/568 ... c-timezone