Какой системный формат даты по умолчанию использовать? - PullRequest
7 голосов
/ 28 января 2011

Я устанавливаю стандарты для нашего приложения.

Мне было интересно, какой формат даты по умолчанию мне выбрать для использования?

Это должно быть:

  • Интернационализация и учет часовых поясов, формат должен быть в состоянии представлять локальное время пользователя
  • Может быть эффективно проанализирован с помощью SimpleDataFormat (или, аналогично, только для классов jdk)
  • Независимость от языка программирования (можетпарсинг в java, python, не дай бог C ++ :) и др.)
  • Предпочтительно на основе ISO или другого принятого стандарта
  • Легко общаться по HTTP (При необходимости, JSON или YAML или что-то в этом роде)в таком виде)
  • Может представлять разрешение с точностью до секунд (чем точнее, тем лучше, если возможно, микросекунды).
  • Читаемость человеком - плюс, но не обязательна
  • Компакт это плюс, но не обязательно

Спасибо,
Максим.

Ответы [ 3 ]

8 голосов
/ 28 января 2011

гггг-мм-ддтчч: ммЗ (см. ISO 8601 ). Вы можете добавить секунды и т. Д.

Вы можете легко прочитать это, для SimpleDateFormat это не станет проблемой.

1 голос
/ 28 января 2011

«Правильный» формат по умолчанию действительно зависит от того, что вы с ним делаете.Форматы синтаксического анализа, хранения и отображения могут быть разными.

Для хранения даты вы (почти) всегда захотите использовать UTC, как говорит aioobe, даже если вы хотите отобразить ее в пользовательскомместное время.Я говорю «(почти)», но я действительно не могу вспомнить случай, когда я бы не хотел бы UTC для сохраненной даты.Вы можете хотеть сохранить информацию TZ о том, где также возникла дата, так что вы можете сообщить об этом в это местное время, но чаще вы хотите отображать местное время для того, кто ищет в данный момент на дату.Это означает, что есть способ определить местное время текущего пользователя независимо от того, какое было первоначальное местное время.

Для его отображения «формат по умолчанию» обычно должен определяться языком зрителя.08/09/10 обычно означает 2010-август-9 в США (" Middle endian "), но обычно означает 2010-сентябрь-8 в большей части остального мира (" Little endian ").Формат ISO-8601 «2010-09-10» является безопасным и однозначным, но зачастую не тем, что люди ожидают увидеть.Вы также можете просмотреть RFC-3339 для даты и времени в Интернете и RFC-2822 для формата сообщения (передающего дату)

Для анализа даты:вы захотите проанализировать его и преобразовать в UTC, но вы должны быть достаточно гибкими в отношении того, что вы принимаете.Опять же, конечные пользователи Locale и часовой пояс, если их можно обнаружить, могут помочь вам определить, какой формат (ы) строки следует принимать в качестве входных данных.Это предполагает вводимые пользователем строки.Если вы генерируете метку даты / времени, вы можете управлять формой, и с разбором проблем не возникнет.

У меня также есть вторая ссылка BalusC , которую я раньше не видел и теперь добавил в избранное.

1 голос
/ 28 января 2011

Наиболее канонической и стандартной формой, вероятно, является "Время Unix" : количество секунд, прошедших с полуночного координированного универсального времени (UTC) 1 января 1970 года.

Если вы установите этот формат времени по умолчанию, вы сможете легко его проанализировать, сохранить в памяти, записать на диск, легко передать по HTTP и т. Д. Это также определенно принятый стандарт, и в некотором смысле он «осведомлен о часовом поясе», поскольку он четко определен независимо от часовых поясов.

(Это формат, в котором я всегда храню все свои метки времени; в базах данных, в памяти, на диске, ...)

...