У нас есть веб-приложение .NET 4.7 MVC 5, работающее под Windows, которое позволяет пользователям выбирать часовой пояс, используя стандартные отображаемые имена Windows, такие как (UTC+00:00) Dublin, Edinburgh, Lisbon, London
:
Мы хотели бы предоставить тот же список параметров часового пояса через новый API, созданный на основе .NET Core 2.0, который будет работать в док-контейнере Linux. Возможно ли это?
Я нашел Мэтт Джонсон превосходный TimeZoneConverter , который отлично справляется с конвертацией между GMT Standard Time
в Windows и Europe/London
в IANA. Однако я не могу получить отображаемое имя Windows откуда-либо.
Вот пример кода для отображения информации о часовом поясе:
var timeZoneIds = TimeZoneConverter.TZConvert.KnownWindowsTimeZoneIds.ToList();
foreach (var timeZoneId in timeZoneIds.Take(4))
{
if (TimeZoneConverter.TZConvert.TryGetTimeZoneInfo(timeZoneId, out var timeZoneInfo))
{
Console.WriteLine($"Windows Id: {timeZoneId}");
Console.WriteLine($".NET Id: {timeZoneInfo.Id}");
Console.WriteLine($"Display name: {timeZoneInfo.DisplayName}");
Console.WriteLine("----");
}
}
При запуске на моей машине для разработки Windows выдает следующее:
Windows Id: AUS Central Standard Time
.NET Id: AUS Central Standard Time
Display name: (UTC+09:30) Darwin
----
Windows Id: AUS Eastern Standard Time
.NET Id: AUS Eastern Standard Time
Display name: (UTC+10:00) Canberra, Melbourne, Sydney
----
Windows Id: Afghanistan Standard Time
.NET Id: Afghanistan Standard Time
Display name: (UTC+04:30) Kabul
----
Windows Id: Alaskan Standard Time
.NET Id: Alaskan Standard Time
Display name: (UTC-09:00) Alaska
----
При запуске в Docker-контейнере Linux мы получаем:
Windows Id: AUS Central Standard Time
.NET Id: Australia/Darwin
Display name: GMT+09:30
----
Windows Id: AUS Eastern Standard Time
.NET Id: Australia/Sydney
Display name: GMT+10:00
----
Windows Id: Afghanistan Standard Time
.NET Id: Asia/Kabul
Display name: GMT+04:30
----
Windows Id: Alaskan Standard Time
.NET Id: America/Anchorage
Display name: GMT-09:00
----
Есть ли какой-нибудь способ получить (скажем) (UTC+10:00) Canberra, Melbourne, Sydney
при работе внутри Docker-контейнера Linux?
Возможные хаки или обходные пути, о которых я думал до сих пор:
- Жесткий код списка отображаемых имен Windows в источнике API
- Создайте «достаточно хорошее» отображаемое имя на основе имеющейся у нас информации, например
(GMT+10:00) AUS Eastern Standard Time
- Посмотрите, может ли пакет Matt Johnson TimeZoneNames использоваться для создания дружественного списка