Преобразование DateTime типа «без вида» в универсальное время с указанием культуры и часового пояса источника. - PullRequest
1 голос
/ 14 февраля 2020

Я запутался здесь, пытаясь понять, как стандартизировать время, приходящее на нашу систему. Мы находимся в печальной ситуации, когда наш API подается в строковое время, подобное этому

2/3/20,08:47:28

Я точно знаю, что время подачи в местное время пользователя. Я также получаю часовой пояс вместе с вызовом API, таким как «Восточное стандартное время»

Из моего понимания прочитав следующую статью Я не могу преобразовать в UT C, если только у самой строки даты нет информации о смещении (чего нет)

Используя ту же статью, я пытался добраться до UT C с помощью следующего сценария тестирования в linqpad.

var str = "2/3/20,08:47:28";
var date = DateTime.Parse(str, new CultureInfo("en-Us"), DateTimeStyles.AssumeLocal); 
TimeZoneInfo.ConvertTimeToUtc(date, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")).Dump();  

Кажется, это не работает, потому что я думаю, что DateTime.Parse получает информацию о часовом поясе с моего локального компьютера, и когда я пытаюсь преобразовать ее в пример Восточное стандартное время это дует, потому что это не часовой пояс, в котором я нахожусь.

Мой вопрос
Есть ли способ проанализировать дату из строки без предположения, что структура DateTime предполагает часовой пояс локального компьютера?

1 Ответ

2 голосов
/ 14 февраля 2020

Если я понимаю проблему, это может сработать для вас ¯\_(ツ)_/¯

Справедливое предупреждение, дата и время не моя сильная сторона

var parsed = DateTime.Parse("2/3/20,08:47:28", CultureInfo.CreateSpecificCulture("en-EU"));
var Id = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var result = TimeZoneInfo.ConvertTime(parsed, Id, TimeZoneInfo.Local);
Console.WriteLine(result.ToUniversalTime());

Выход

2/3/2020 1:47:28 PM

Демо

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