2016-10-14 3 views
0

Я использую DateTime на компьютерах с разными культурами. Таким образом, я сохраняю DateTime с ToString(CutureInfo.InvariantCulture), который можно легко прочитать во всех других культурах. Формат - это что-то вроде '01/19/2012 21:00:00'.DateTime InvariantCulture with TimeZone

Но я хочу также добавить информацию о часовом поясе. Да, я мог бы задать формат как

"MM/dd/yyyy hh:mm:ss+zzz". 

Но мой первый был священник научил, можно ли Объединить InvariantCulture каким-то образом с TimeZone?

Любая помощь будет оценена!

+1

См. Ниже: https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx – jdweng

+1

Что вы подразумеваете под «сочетанием InvariantCulture как-то с TimeZone»? Если у вас есть фиксированный формат, ToString со строкой формата выполнит эту работу; или я что-то упускаю? –

+0

Ну, просто не делайте этого и не сохраняйте DateTime.UtcNow, поэтому вам все равно. –

ответ

0

Несколько вещей:

  • Временная зона и смещение часового пояса являются две разные вещи. Вы спрашиваете о смещениях. См. the timezone tag wiki для получения дополнительной информации об этом.

  • Поскольку вы заботитесь о смещении часового пояса, вы должны использовать тип DateTimeOffset вместо типа DateTime.

  • Использование инвариантной культуры - это хорошо, но вы также должны использовать формат, который однозначен, потому что 1/4/2016 так же легко может быть либо 4 января, либо 1 апреля. Инвариантная культура всегда будет рассматривать это как 4 января, потому что она более тесно связана с Соединенными Штатами. Но если кто-то другой читает эту строку за пределами США в какой-то другой культуре, они могут легко ее смутить.

  • Формат, который вы, вероятно, хотите использовать, - это ISO8601 Расширенный формат со смещением. Это почти идентично формату, описанному в RFC3339, а также в the W3C's DateTime note. В C# вы можете использовать формат "o", чтобы легко получить это.

    DateTimeOffset.Now.ToString("o", CultureInfo.InvariantCulture) 
    
0

Спасибо за разъяснения. Да, я имел в виду смещение часовых поясов. И я также обнаружил новый класс DateTimeOffset, и кажется, что он отлично работает для моих нужд, но не уверен, если он охватывает все мои проблемы.

У меня есть две проблемы: - синтаксический анализ даты из строки, которая сохраняется в культуре инвариантов, но считается локальной и без смещения часового пояса. В будущем я напишу это со смещением часового пояса, поэтому эта проблема исчезнет - дата также сохраняется в SQLite и не поддерживает смещение часового пояса, поэтому смещение исчезает после прочтения. Я не могу проверить, может ли модель базы данных быть расширенной, чтобы сохранить смещение часового пояса и сохранить даты в строчном формате.

В классе DateTimeOffset, что я не понимаю, свойство Date является старым классом DateTime, что позволяет ему использовать это свойство, чтобы установить время до полуночи на определенную дату. Это необходимо для изменения моего кода во многих местах.

Смежные вопросы