Разбор локальной строковой даты с использованием TimeZoneInfo - PullRequest
0 голосов
/ 21 мая 2019

У меня есть строка с датой в Чили: "2018-04-23"

В моей стране, когда я пишу этот пост, смещение часового пояса составляет -4 часа.
Но возвращаясь к этой дате (23 апреля), смещение часового пояса составило -3 часа.

Соответствующим TimeZoneInfo, содержащим эти произвольные изменения смещения, является следующее:

 var tzi = TimeZoneInfo.FindSystemTimeZoneById("Pacific SA Standard Time");

Моя цель - сохранить эту дату (2018-04-23) в SQL Server, в столбце типа DateTimeOffset

Таким образом, эта дата должна быть сохранена как: «2018-04-23 00: 00: 00.000 -03: 00» (при визуальном осмотре с использованием Management Studio)

Как я могу достичь этого программно?

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

 var date = DateTime.Parse("2018-04-23");
 var tzi = TimeZoneInfo.FindSystemTimeZoneById("Pacific SA Standard Time");

 var utcDate = TimeZoneInfo.ConvertTimeToUtc(date, tzi);
 var offset = tzi.GetUtcOffset(utcDate);

 return ((DateTimeOffset)utcDate).ToOffset(offset);

Но ...

  • Не работает (сохраняется как «2018-04-23 00: 00: 00.000 -04: 00»)
  • Это слишком грязно

Другой способ задать то же самое заключается в следующем:

У меня есть местная дата в нестандартном формате: "2018-04-23"
Соответствующий часовой пояс для этого местоположения: "Pacific SA Standard Time"
Я хочу ту же дату в стандартном формате ISO: «2018-04-23 00: 00: 00.000 -03: 00»

Как мне этого добиться?
Входы:"2018-04-23" и "Стандартное время Pacific SA"
Вывод:"2018-04-23 00: 00: 00.000 -03: 00"

...