У меня есть файл журнала, который содержит строки даты / времени, отформатированные так:
2019/10/01 15:30
Как видите, строки не содержат никакой информации о часовом поясе. Тем не менее, я знаю часовой пояс, в котором представлено время.
Если я использую этот код C # на моем собственном ПК, для которого правильно задан местный часовой пояс, время анализируется, как и ожидалось. Я ожидаю преобразовать местное время в UTC для вставки в базу данных.
Time.ParseExact("2019/10/01 15:30", "yyyy/MM/dd HH:mm", provider, DateTimeStyles.AdjustToUniversal & DateTimeStyles.AssumeLocal);
Однако, если я запускаю этот код на одном из хостов Docker, для которого часовой пояс установлен в UTC, времяанализируются как UTCЭто имеет смысл, поскольку на хосте Docker использование UTC AssumeLocal
будет таким же, как и UTC.
Простого применения ручного смещения недостаточно из-за перехода на летнее время. Кроме того, некоторые из этих журналов являются историческими и возвращаются до изменения летнего времени, поэтому даже использование алгоритма было бы сложным, и кажется, что это что-то, что уже должно быть решено (то есть, учитывая дату и часовой пояс, определите, находится ли он в летнем времениили нет, а затем настройте на UTC соответственно)
Я хочу иметь возможность явно указать часовой пояс для метки времени, и чтобы структура использовала как данный часовой пояс, так и фактическийдата, чтобы правильно преобразовать время в UTC. Я посмотрел на этот вопрос и на этот вопрос , но все они, похоже, зависят от того, установлена ли сама система в часовом поясе, в котором вы хотите предположить, что дата находится в.
Второй вопрос, кажется, начинает касаться вопроса о предположении известного часового пояса, но затем в ответах просто используется GetUtcOffset
в проанализированном времени, чтобы определить количество времени для смещения времени. Это предполагает, что время уже проанализировано в желаемом часовом поясе.