Как правильно конвертировать Midnight в определенном часовом поясе в Utc время? - PullRequest
0 голосов
/ 30 декабря 2018

Это кажется простой проблемой, но выглядит сложнее, чем кажется:

Как преобразовать полночь указанного часового пояса и преобразовать ее в время Utc (независимо от часового пояса локального компьютера)?

Один пример: Сегодня полночь CET - это 11:00 (дата ранее) в UTC.

Я пробовал следующее:

DateTime midnight = TimeZoneInfo.ConvertTime(DateTime.UtcNow, specifiedTimeZoneInfo).Date;
DateTime utcTime = midnight.ToUniversalTime();

Проблема в том, что этот код толькоработает, если часовой пояс локального компьютера, на котором выполняется код, совпадает с часовым поясом, используемым в TimeZoneInfo.ConvertTime.

Как это можно сделать независимо от часового пояса локального компьютера?

1 Ответ

0 голосов
/ 30 декабря 2018

Рассмотрим следующий код:

var cestZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");

var cestNow = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, cestZone);
var cestMidnight = cestNow.Date;
var cestMidnightInUTC = TimeZoneInfo.ConvertTimeToUtc(cestMidnight, cestZone);

Когда DateTime.UtcNow равно 12/29/2018 - 11:30:00 PM В результате:

If you live in CEST and look at clock
cestNow:           12/30/2018 - 12:30:00 AM     

If you live in CEST and had a look at clock at midnight (start of today, 30 minutes ago)
cestMidnight:      12/30/2018 - 12:00:00 AM 

At your midnight, UTC was
cestMidnightInUTC: 12/29/2018 - 11:00:00 PM

Примечание: 12:00:00 AM - начало дня.Так, например, если utc сейчас равен 12/29/2018 - 11:30:00 PM, полночь была 23:30 часов назад в 12/29/2018 - 12:00:00 AM utc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...