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


10

В Канаде все знакомы с форматом даты YYYY-MM-DD. В Европе или Южной Африке они предпочитают DD-MM-YYYY. Есть пользователи из Южной Африки, которые путаются с YYYY-MM-DDформатом даты. Есть ли способ справиться с этой ситуацией?

Я думал об использовании следующего формата метода для всех: Feb 02, 2011


21
Я думаю, что формат YYYY-MM-DD также является стандартом ISO.
FrustratedWithFormsDesigner

2
«В Европе или Южной Африке они предпочитают DD-MM-YYYY». За исключением, например, в Венгрии ( YYYY.MM.DD) или Финляндии ( DD.MM.YYYY), или ... Извините, реальность грязная :-(
Péter Török

6
А как насчет разных календарей?

4
При сборе данных РЛС (в Северной Америке), мы использовали это для имен файлов: prefix_1999_12_23_16_45_53.ext. Основная причина: это было чертовски легко сортировать, искать и анализировать. При поиске вы действительно хотите сначала начать с самого значительного подразделения, чтобы достичь цели КАК МОЖНО СКОРЕЕ. Такая строка даже подходит для двоичного дерева. В лаборатории доминировали студенты из Европы, но я думаю, что это был просто здравый смысл, если не научный стандарт. Однако в стране, где я вырос, мы использовали бы DD-MM-YYYY для повседневного использования. Причина: когда ты просыпаешься, какую первую часть ты хочешь знать?
Работа

2
@Frustrated, я думаю , его дело в том , что есть календари с другим отправным годом (как бы мусульманин интерпретирует например 30.12.1268?), Или лунные месяцы (из которых есть ки. 13 в год) и т.д. Таким образом , чтобы быть на самом деле универсальный - это больше, чем просто согласие о том, какое число является днем, а какое месяцем ...
Péter Török

Ответы:


15

Неоднозначная часть заключается в дифференцировании дня от месяца , если они представлены числами.

02/03 означает 03 февраля или 02 марта?

Изменив идентификатор месяца по номеру и названию, вы удалите эту неоднозначность. Чтобы ответить на ваш вопрос, ваш вариант Feb 02, 2011кажется хорошим решением.

По-прежнему существует потенциальная проблема с номером года, если вы пишете его только из 2 цифр, но тогда это легко исправить (используйте 4).


10
И тогда вы можете просто иметь файл перевода названий месяцев на разных языках.
FrustratedWithFormsDesigner

1
@FrustratedWithFormsDesigner И не забудьте также получить профессиональный перевод правильных (известных) сокращений.
Николь

А как насчет языков, которые не мешают называть месяцы?
ПРОСТО МОЕ правильное мнение

19

Нет. Не существует общепризнанного формата даты.

ISO 8601 Определяет международный стандарт для форматов даты. Таким образом, это, вероятно, лучший компромисс. Но, как вы говорите, пользователям не всегда нравится этот формат.

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


2
Это замечательно. Я обычно использую YYYYMMDD для файлов журналов и т. Д. Теперь я могу сказать, что я просто совместим с ISO-8601!
Марк Харрисон

1
При использовании ISO 8601 я обычно нахожу, что лучше всего отформатировать всю вещь, то есть 1999-12-25T00: 00: 00.000Z . Да, это похоже на бред для обычного человека, но нет никакой вероятности двусмысленности.
MattDavey

2
«Единственное правильное решение - представить другой формат для разных стран». - и как именно мне распечатать дату на упаковочном листе, который можно отправить в любую точку мира?
Скотт Уитлок

@ScottWhitlock: К сожалению, не существует общепринятого решения этой проблемы. Если вы не знаете, куда отправляется посылка, когда вы печатаете дату, то лучше всего подойдет ISO 8601.
Крамии

«Единственное правильное решение - представить другой формат для разных стран». Я бы сказал, что это не правильно. Сегодня так получилось, что в некоторых библиотеках была полезна идея моего предпочтительного формата даты, основанного на моем предпочтительном языке, вызванная путаница. Но в качестве первого шага, поскольку мы не можем исправить все культуры прямо сейчас, используйте ISO 8601 или текст в течение нескольких месяцев или что-то в этом роде.
Эрик, я

9

Вы должны использовать информацию о культуре для этого. Или, по крайней мере, локальный формат отображения.

В JavaScript вы можете использовать метод toLocaleString для класса Date .

Для C # вы можете использовать строку формата при использовании ToString .

Быстрый поиск Google должен показать вам, как использовать культуру на выбранном вами языке.


5

Я бы пошел с YYYY-MM-DD (и всегда выписывал бы четырехзначные годы и двузначные месяцы и дни). ГГГГ-ДД-ММ, насколько мне известно, встречается редко, поэтому формат ГГГГ-ММ-ДД имеет наименьшую двусмысленность, и в конечном итоге ваши пользователи поймут это. Кроме того, вы получаете тривиальное преимущество сортировки.


2

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


1

Много раз вы можете настроить язык и использовать I18n в большинстве сред.


0

В общем случае вам нужно будет указать формат и значение. Это единственный способ избежать путаницы. Например, вы можете сказать «2011-02-02 (ГГГГ-ММ-ДД)». Это происходит за счет простоты и читабельности, поэтому знайте свою аудиторию.

Конечно, вы можете сказать: «Здесь и далее все даты будут в формате ГГГГ-ММ-ДД ...». Тогда появившееся позже слово «2011-02-02» будет однозначным. Это может быть более приемлемым, но опять же, знайте свою аудиторию.


Правильно, за исключением того, что в эстонский день = päev и month = kuu, в Филиппино это: araw и buwan, на финском языке: päivä, kuukausi, на венгерском языке: nap, hónap, на индонезийском языке: hari, bulan, на мальтийском языке: jum, xahar на румынском: zi, lună, на турецком: gün, ay, на вьетнамском: ngày, tháng ... не говоря уже о многих языках, где любой месяц не начинается с m или день не начинается с d (немецкий: Monat, Tag ) а также языки, которые не используют ничего подобного латинскому алфавиту.
Работа

1
Ну, "2011-02-02" однозначно в любом случае ...;)
Мартин

0

Это предположение, вероятно, бесполезно, но я видел месяцы, написанные римскими цифрами. Конечно, 3 / XI / 2011 может быть 11 ноября или 3 марта, но я думаю, что первая интерпретация более естественная.


1
Римские цифры? «Природные?»
Вонко вменяемый

@Wonko, «естественный» в том смысле, что в этом контексте XI, скорее всего, будет интерпретироваться как месяц, а не как день. Я признаю, что это чрезвычайно субъективно.
ggambett

+1, я сам думал что-то подобное. тем не менее, я также согласен с вашими критиками.
Работа

Никогда, никогда не видя этот формат, я сначала подумал «опечатка» или «ошибка перевода», прежде чем меня осенило «римские цифры». Только тогда я попытаюсь угадать значение.
Wonko the Sane

Не говоря уже о том, что 3 / II / 2011 будет интерпретироваться как ноябрь.
MSalters

0

Я бы сказал, что это зависит от того, что вы делаете, насколько вы контролируете вход, и где вы его храните?

Для хранения я бы использовал то, что предложил Майк Данлавей:

ГГГГММДДЧЧММСС, где время в UTC - это путь, по которому я иду, когда у меня есть выбор, по причинам, которые вы указываете. Когда у меня нет выбора, я позволяю пользователю выбирать.

Он не оставил это как ответ, так что я буду.

Еще одна вещь: посмотрите на следующий снимок экрана того, как ввести дату истечения срока действия CC: http://www.ubercart.org/files/credit_card_checkout.jpg

Самое замечательное в этом примере то, что он не заставляет вас думать. Он использует как цифры, так и имена за месяц. Я хотел бы рассмотреть возможность использования чего-то похожего для ввода. Для месяца включите как номер, так и локализованное имя. Для года и дня используйте числовые поля со стрелками вверх / вниз или со списком. Тогда управление календарем также кажется изящным.

Как я уже сказал, это зависит. Для хранения: если вы используете базу данных, проверьте, обеспечивает ли она хороший однозначный формат данных. При использовании другого метода посмотрите, помогает ли «ГГГГММДДЧЧММСС, где время в UTC». Чтобы представить его пользователю - примите во внимание, какие страны / локали могут быть вовлечены, затем выберите наиболее прямолинейный вид «Не заставляй меня думать». Также рассмотрите возможность предоставления опции.

Наконец, проверьте некоторые классные продукты, которые уже делают нечто подобное, и попытайтесь выяснить, как они это делают.


ах дерьмо, при чтении скриншота я думал, что мы говорим о 11 ноября ... только для того, чтобы понять, что день не был необходим, когда мы говорили о дате истечения срока действия кредитной карты: /
Матье М.

@Matthieu M., да, это немного вводит в заблуждение :) Однако, если вы держите в руке СС и собираетесь вводить данные, то, возможно, это поможет больше, чем причинит боль. Если бы было три коробки - одна на день, то это могло бы быть менее двусмысленным.
Работа

0

Не существует универсального формата даты и времени для конечных пользователей сайта. Также нет единого значения даты и времени, потому что значение отличается для часового пояса клиента. Вам следует использовать глобализацию - ее таргетинг на форматы данных, времени, валюты, календаря, нумерации, основанные на культуре пользователей (может быть получен из принятых языков, передаваемых из браузера пользователя или переключателем, реализованным непосредственно в вашем приложении). Некоторые API (например, .NET) имеют прямую поддержку этих функций.

Для хранения даты и времени в базе данных используется универсальный формат - UTC (координата универсального времени).



-2

К сожалению, весь интеллект в международном вычислительном мире не может взломать этот орех.

Ни Microsoft, ни другие поставщики не рассматривают возможность добавления маски даты, при которой месяц будет выглядеть заполненным нулями, почти как день, но в виде трех цифр. Принятие практики поможет продвинуть новую серию измененных форматов дат, которые математически эквивалентны, но при этом их будет легко идентифицировать и отличить в любом из традиционных форматов дат. Это:

  • 0MM-DD-YYYY, например, 002-03-2016 за февраль 03,2016

  • ДД-0ММ-ГГГГ, например, 03-002-2016 на 03 февраля 2016 года

  • ГГГГ-0ММ-ДД, например, 2016-002-03 на 2016-02-03

  • ГГГГ-ДД-0ММ, например, 2016-03-002 (если кто-то хотел его использовать!)

Кажется, слишком легко это исправить ... Я думаю, просто не очень хорошо продается.


2
Все, что я могу сказать: xkcd.com/927 У нас уже есть стандарт ISO для дат, и нам не нужен еще один.
Саймон Б
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.