Использовать разбор строк или библиотеку C #
Я нашел 2 решения, которые дали мне нужные данные, но оба довольно ужасные и хакерские.
- На внешнем интерфейсе вызовите функцию
.toString()
и момент совпадения результата, чтобы получить только имя часового пояса.
Это можно сделать с помощью регулярных выражений или .split()
, и это работает, предполагая, что формат строки даты никогда не изменяется. Это может выглядеть так:
var timeZoneName = momentDate._d.toString().split("(")[1].split(")")[0];
//timeZoneName now holds "Pacific Daylight Time"
После передачи этого значения в серверную часть вам все равно нужно заменить «Дневной свет» на «Стандартный», чтобы создать экземпляр TimeZoneInfo.
- На сервере используйте внешнюю библиотеку для сопоставления.
Две библиотеки, которые я нашел, были TimeZoneNames и TimeZoneConverter . Они могут принимать имена в стиле IANA и сопоставлять их с аналогами Windows Standard. Я использовал TimeZoneConverter как:
localTZName = TZConvert.IanaToWindows(tzName);
TimeZoneInfo localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(localTZName);
tzName был результатом использования moment.tz.guess()
на внешнем интерфейсе. Этот метод работал очень хорошо, но он представляет собой предварительно созданный эквивалент создания карты из одного стиля в другой, поэтому я рад, что кто-то еще прошел через эту боль, поэтому мне не пришлось.
Оба эти решения ужасны, но, похоже, их не обойти
Первое решение основывается на надежде, что строковое представление момента никогда не изменится, и у момента действительно должен быть способ получить этот конкретный фрагмент данных без необходимости вырезать его из строки, тем более что они уже пытались найти данные , они просто не позволяют вам их получить.
Второе решение - это просто перебор. Невыразительный, некрасивый, но он работает, хотя на самом деле такое ощущение, что он должен быть чем-то родным для элемента moment.tz.js, TimeZoneInfo или, предпочтительно, для обоих.
Кажется, что разъединение происходит из-за того, что moment.js отказывается признавать существование Windows, в то время как Windows отказывается признавать, что часовые пояса - сложные звери с большой историей, которые могут влиять на точное датирование.