Чи існує універсальний формат дати, який може зрозуміти кожен у світі?


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

Неоднозначна частина полягає в диференціюванні дня від місяця , якщо вони представлені числами.

Чи означає 03/03 02 лютого чи 02 березня?

Змінивши ідентифікатор місяця з його номера на його ім'я, ви видалите цю неоднозначність. Щоб відповісти на ваше запитання, ваш варіант, Feb 02, 2011здається, є хорошим рішенням.

Існує ще проблема з номером року, якщо ви пишете це лише з двох цифр, але тоді це легко виправити (використовуйте 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, або текст протягом місяців, або щось інше.
Ерік I

9

Для цього слід використовувати інформацію про культуру. Або принаймні локальний формат відображення.

В JavaScript ви можете використовувати метод toLocaleString для класу Дата .

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

Швидкий пошук Google повинен показати вам, як використовувати культуру на обраній вами мові.


5

Я б поїхав з РРРР-ММ-ДД (і завжди виписувати чотиризначні роки та двоцифрові місяці та дні). YYYY-DD-MM, наскільки мені відомо, є рідкістю, тому формат YYYY-MM-DD є найменшим неоднозначністю, і, зрештою, ваші користувачі захопляться. Також ви отримуєте тривіально-сортувальну перевагу.


2

Чи можете ви надати кожному користувачеві свою локальну мову, яка надає дати та іншу інформацію відповідно до їх місцевих переваг?


1

Багато разів ви можете налаштувати локаль та використовувати I18n у більшості фреймів.


0

У загальному випадку вам потрібно буде вказати і формат, і значення. Це єдиний спосіб уникнути будь-якої плутанини. Наприклад, ви можете сказати "2011-02-02 (РРРР-ММ-DD)". Це відбувається за рахунок простоти та читабельності, тому знайте свою аудиторію.

Звичайно, ви можете сказати: "Далі всі дати у форматі" РРРР-ММ-DD .... ". Потім" 2011-02-02 ", які з'являться згодом, будуть однозначними. Це може бути приємніше, але, знову ж таки, знайте свою аудиторію.


Правильно, за винятком того, що в естонському дні = päev і місяць = kuu, у Filippino вони: araw і buwan, у фінській: päivä, kuukausi, угорською: nap, hónap, по-індонезійськи: hari, bulan, в Malteese: 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 the Sane

@ Вонко, "природний" в тому сенсі, що в цьому контексті XI швидше трактується як місяць, ніж як день. Я визнаю, це надзвичайно суб'єктивно.
ggambett

+1, я думав щось подібне сам. але я також погоджуюся з вашими критиками.
Робота

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

Не кажучи вже про те, що 3 / II / 2011 в кінцевому підсумку трактується як листопад.
MSalters

0

Я б сказав, що це залежить від того, що ви робите, скільки контролюєте над входом, і чи зберігаєте ви його десь?

Для зберігання я б використав те, що запропонував Майк Данлі:

YYYYMMDDHHMMSS, де година в UTC - це шлях, який я проходжу кожен раз, коли у мене є вибір, з причин, які ви наводите. Коли у мене немає вибору, я дозволяю користувачеві вибирати.

Він не залишив це як відповідь, тому я і буду.

Ще одне: ознайомтеся з наступним знімком екрана, як ввести дату закінчення терміну дії: http://www.ubercart.org/files/credit_card_checkout.jpg

Чудова річ у цьому прикладі, що він не змушує задуматися. Він використовує як числа, так і імена за місяць. Я б подумав використовувати щось подібне для введення. За місяць включіть як номер, так і локалізовану назву. Для року та дня використовуйте цифрові поля вгору / вниз або комбіновані поля. Тоді управління календарем також здається чудовим.

Як я вже сказав, це залежить. Для зберігання: якщо ви використовуєте базу даних, перевірте, чи вона вже забезпечує хороший однозначний формат даних. Якщо ви використовуєте якийсь інший метод, подивіться, чи допомагає "YYYYMMDDHHMMSS, де година в UTC". Для того, щоб представити його користувачеві - врахуйте, які країни / місцеположення можуть бути залучені, а потім виберіть найпростіший вид представлення "Не змушуйте мене думати". Також розглянути можливість надання варіанту.

Нарешті, перегляньте кілька цікавих продуктів, які вже роблять щось подібне, і спробуйте дізнатися, як вони це роблять.


ага лайно, читаючи скріншот, я думав, що ми говоримо про 11 листопада ... тільки зрозуміти, що день не потрібен, коли говорити про дату закінчення терміну дії кредитної картки: /
Матьє М.

@Matthieu M., так, це трохи вводить в оману :) Однак, якщо ви тримаєте CC в руці і збираєтесь здійснити введення даних, то, можливо, це допоможе більше, ніж шкодить. Якби було три коробки - по одному на день, то це може бути менш неоднозначним.
Робота

0

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

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


UTC не такий універсальний: Якщо ви хочете взяти до уваги високосні секунди, вам слід скористатися TAI
mouviciel

-2

Прикро, що весь інтелект у міжнародному світі обчислень не може зламати цю гайку.

Не Майкрософт, ані інші постачальники не розглядали можливість додавання маски дати, яка зробила б "Місяць" заповненим нулем, як День, але як три цифри. Прийняття практики допоможе просувати нову серію модифікованих форматів дат, які є математично еквівалентними, залишаючись легкими для ідентифікації та розрізнення в будь-якому з традиційних макетів дати. Це є:

  • 0MM-DD-YYYY, наприклад 002-03-2016 за 03 лютого 2016 року

  • DD-0MM-YYYY, наприклад 03-002-2016 за 03 лютого 2016 року

  • РРРР-0ММ-DD, наприклад 2016-002-03 за 2016-02-03

  • РРРР-DD-0MM, наприклад 2016-03-002 (якщо хтось хотів ним скористатися!)

Дуже легко виправити це таким чином ... Я думаю, простий просто не продається добре.


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