Как мне отформатировать DateTime или TimeZone/TimeZoneInfo для отображения трех букв?

Я работаю со спецификацией, которая требует особого формата Datetime, с которым мне еще не приходилось работать.

Во время обработки дата / время OFX (1, ​​а не 2) должны быть помечены (DTCLIENT или DTSERVER) в следующем формате:
+20071015021529,000

однако в примерах это показано:

20071015021529.000[-8:PST]    

У меня нет проблем с первым, используя утверждение

DateTime.Now.ToString("yyyyMMddHHmmss.fff")

Я даже могу понять, как получить %z чтобы получить правильное смещение.

Трехбуквенный код часового пояса - это то место, где я спотыкаюсь. Есть ли простой способ получить это в.net, или я собираюсь в конечном итоге писать код для вывода и анализировать то, что мне нужно?

3 ответа

Решение

Вам необходимо выяснить, какие именно трехбуквенные коды нужны. Что бы Europe/Paris дать, например? Лично я бы преобразовал данные в UTC и отформатировал бы их таким образом, если только вам действительно не нужно сохранять информацию о часовом поясе.

Трехбуквенные коды часовых поясов не являются уникальными для разных стран и не полностью стандартизированы. Например, "CST" может быть аббревиатурой от "Центральное стандартное время (США)" или "Стандартное китайское время". Что правильно, зависит от вашей локали.

Насколько мне известно, в.NET Framework не реализована функциональность для поиска подобных кодов, поэтому вам нужно будет реализовать ее самостоятельно.

Кроме того (но вы, вероятно, знаете это), вы должны быть осторожны в том, как реализовать эту функцию. Не обязательно однозначное соответствие между смещениями UTC и кодами часовых поясов. Например, UTC-0700 может быть либо по стандартному горному времени США (MST), либо по тихоокеанскому летнему времени США (PDT).

Если вы будете использовать r, это даст вам формат RFC. Поможет ли это вам?

String.Format("{0:r}", dt);  // "Sun, 09 Mar 2008 16:05:07 GMT"   RFC1123

Вы также можете проверить эту ссылку SO, если она может вам помочь.

Другие вопросы по тегам