Идентификаторы часовых поясов, которые вы указали, взяты из базы данных часовых поясов IANA, она же TZDB (она же Olson, она же tz).Они не поддерживаются .NET (хотя .NET Core, работающий на Linux / Mac, вероятно, сделает то, что вы хотите).
My Noda Time проект поддерживает их хотя.Вы бы использовали:
var zoneId = "America/Antigua";
var zone = DateTimeZoneProviders.Tzdb[zoneId];
var now = SystemClock.Instance.GetCurrentInstant();
var zoned = now.InZone(zone);
Console.WriteLine(zoned);
Это явно использует SystemClock
- в реальном коде я бы посоветовал вам принять IClock
через внедрение зависимостей для тестируемости - внедрить SystemClock.Instance
при запуске приложения, но используйте FakeClock
для тестирования.
Альтернативный эквивалентный код, демонстрирующий ZonedClock
:
var zoneId = "America/Antigua";
var zone = DateTimeZoneProviders.Tzdb[zoneId];
var systemClock = SystemClock.Instance;
var zonedClock = systemClock.InZone(zone);
var zoned = zonedClock.GetCurrentZonedDateTime();
Console.WriteLine(zoned);