Раньше я делал «снимок» нашей системы из приложения (клиента) в нашем офисе в Великобритании.Снимок был идентифицирован по метке времени из даты и времени снимка.В CosmosDb отметка времени выглядела следующим образом.
"timeMark": "2018-05-11T15:14:51"
Это было время в Великобритании с использованием DateTime.Now
и было фактическим временем в Великобритании, когда был сделан снимок.Я подумал, что было бы неплохо поместить клиент моментальных снимков в приложение-функцию Azure и запускать его автоматически каждые 5 минут.Это работает хорошо, за исключением того, что отметка времени была неверной.Я хотел, чтобы отметка времени на CosmosDb была читаемой как текущее время в Великобритании.Я использовал этот код для изменения метки времени в функции Azure:
public static DateTime UkTime(DateTime t)
{
TimeZoneInfo ukTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
DateTime utcDate = DateTime.Now;
DateTime ukTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, ukTimeZone);
return ukTime;
}
Метка времени теперь выглядит так на CosmosDb
"timeMark": "2018-09-28T05:00:04+00:00"
, которая читается как правильное время, которое было принято в Великобритании.(Летнее время).Теперь, когда я читаю таймбэк, это на час вперед от того, что должно быть.
Полностью запутался как лучший способ приблизиться к этому.В основном, Великобритания в настоящее время на GMT + 01 час опережает сентябрьское время по Гринвичу, а в октябре оно вернется на GMT + 00 час.Я хочу иметь возможность прочитать «сырой» документ на CosmosDb как правильное время в Великобритании, когда был сделан снимок, и прочитать его обратно в приложение как таковое.Кажется излишне сложным!