Czy istnieje uniwersalny format daty, który każdy na świecie może zrozumieć?

10

W Kanadzie wszyscy znają format daty YYYY-MM-DD. W Europie lub Południowej Afryce wolą DD-MM-YYYY. Są użytkownicy z Południowej Afryki, którzy mylą się z YYYY-MM-DDformatem daty. Czy istnieje sposób na poradzenie sobie z tą sytuacją?

Myślałem o użyciu następującego formatu metody dla wszystkich: Feb 02, 2011

Thierry Lam
źródło
21
Myślę, że format RRRR-MM-DD jest również standardem ISO.
FrustratedWithFormsDesigner
2
„W Europie lub Południowej Afryce wolą DD-MM-YYYY”. Z wyjątkiem np. Na Węgrzech ( YYYY.MM.DD) lub w Finlandii ( DD.MM.YYYY) lub ... Niestety, rzeczywistość jest brudna :-(
Péter Török
6
Co z różnymi kalendarzami?
4
W trakcie zbierania danych radarowych (w Ameryce Północnej), użyliśmy to dla nazw plików: prefix_1999_12_23_16_45_53.ext. Główny powód: to było naprawdę łatwe do sortowania, WYSZUKIWANIA i parsowania. Podczas wyszukiwania naprawdę chcesz zacząć od najważniejszej jednostki, aby jak najszybciej osiągnąć cel. Ten rodzaj łańcucha jest nawet przyjazny dla drzewa binarnego. W laboratorium dominowali studenci z Europy, ale myślę, że był to zdrowy rozsądek, jeśli nie standard naukowy. Jednak w kraju, w którym dorastałem, używamy DD-MM-RRRR do codziennego użytku. Uzasadnienie: kiedy się obudzisz, jaką pierwszą część chcesz wiedzieć?
Job
2
@ Sfrustrowany, zgaduję, że jego celem jest to, że istnieją kalendarze z innym rokiem początkowym (jak muzułmanie interpretują np. 30.12.1268?) Lub miesiącami księżycowymi (których jest około 13 rocznie) itd. Tak więc być naprawdę universal jest czymś więcej niż tylko ustaleniem, która liczba to dzień, a który miesiąc ...
Péter Török

Odpowiedzi:

15

Dwuznaczne jest to, aby odróżnić dzień od miesiąca, jeśli są one reprezentowane przez numery.

Czy 02/03 oznacza 03 lutego czy 02 marca?

Zmieniając identyfikator miesiąca z jego numeru z nazwą , usuwasz tę dwuznaczność. Aby odpowiedzieć na twoje pytanie, twój wariant Feb 02, 2011wydaje się dobrym rozwiązaniem.

Nadal istnieje potencjalny problem z numerem roku, jeśli piszesz go tylko z 2 cyframi, ale łatwo go naprawić (użyj 4).


źródło
10
A potem możesz mieć plik tłumaczenia dla nazw miesięcy w różnych językach.
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner I nie zapomnij o profesjonalnym tłumaczeniu również na właściwe (dobrze znane) skróty.
Nicole
Co z językami, które nie zawracają sobie głowy określaniem miesięcy?
WŁAŚNIE MOJA poprawna OPINIA,
19

Nie. Nie ma powszechnie uznanego formatu daty.

ISO 8601 Definiuje międzynarodowy standard formatów dat. Jako taki jest to prawdopodobnie najlepszy kompromis. Ale jak mówisz, użytkownicy nie zawsze lubią ten format.

Jedynym poprawnym rozwiązaniem jest przedstawienie innego formatu dla różnych krajów. Może się okazać, że istnieje standardowa biblioteka do osiągnięcia tego, jeśli wybrany język programowania ma znaczące poparcie.

Kramii
źródło
2
To jest świetne. Zwykle używam YYYYMMDD do plików logów itp. Teraz mogę powiedzieć, że jestem po prostu zgodny z ISO-8601!
Mark Harrison
1
Kiedy używam ISO 8601, zwykle najlepiej jest sformatować całą jawność, tj. 1999-12-25T00: 00: 00.000Z . Tak, dla przeciętnego człowieka wygląda to jak bełkot, ale nie ma szans na dwuznaczność.
MattDavey,
2
„Jedynym prawidłowym rozwiązaniem jest przedstawienie innego formatu dla różnych krajów”. - i jak dokładnie powinienem wydrukować datę na dowodzie dostawy, która mogłaby zostać wysłana w dowolne miejsce na świecie?
Scott Whitlock,
@ScottWhitlock: Niestety nie ma uniwersalnie akceptowanego rozwiązania tego problemu. Jeśli nie wiesz, gdzie paczka jest wysyłana podczas drukowania daty, najlepszym rozwiązaniem może być ISO 8601.
Kramii
„Jedynym prawidłowym rozwiązaniem jest przedstawienie innego formatu dla różnych krajów”. Powiedziałbym, że to nie jest poprawne. Tak się dzisiaj zdarza, że ​​niektóre biblioteki pomocne w wyborze mojego preferowanego formatu daty, oparte na moim preferowanym języku, spowodowały zamieszanie. Ale jako pierwszy krok, ponieważ nie możemy teraz naprawić wszystkich kultur, użyj ISO 8601 lub tekstu przez miesiące lub coś takiego.
Erik I
9

Powinieneś do tego użyć informacji o kulturze. Lub przynajmniej lokalny format wyświetlania.

W JavaScript możesz użyć metody toLocaleString dla klasy Date .

W przypadku C # możesz użyć ciągu formatu podczas korzystania z ToString .

Szybka wyszukiwarka Google powinna pokazać, jak korzystać z kultury w wybranym języku.

Tyanna
źródło
5

Wybrałbym RRRR-MM-DD (i zawsze wypisuję czterocyfrowe lata i dwucyfrowe miesiące i dni). O ile wiem, RRRR-DD-MM jest czymś niezwykłym i rzadkim, więc format RRRR-MM-DD jest najmniej dwuznaczny, a w końcu Twoi użytkownicy go złapią. Ponadto zyskujesz przewagę sortowania trywialnego.

jprete
źródło
2

Czy możesz podać każdemu użytkownikowi swoje własne ustawienia regionalne, które następnie wyświetlają daty i inne informacje zgodnie z lokalnymi preferencjami?


źródło
1

Wiele razy możesz skonfigurować ustawienia regionalne i używać I18n w większości frameworków.

chiurox
źródło
0

W ogólnym przypadku będziesz musiał określić zarówno format, jak i wartość. Jest to jedyny sposób, aby uniknąć nieporozumień. Na przykład możesz powiedzieć „2011-02-02 (RRRR-MM-DD)”. Dzieje się tak kosztem prostoty i czytelności, więc poznaj swoich odbiorców.

Możesz oczywiście powiedzieć „Odtąd wszystkie daty są w formacie RRRR-MM-DD ....” Wtedy „2011-02-02” pojawiający się później będzie jednoznaczny. To może być smaczniejsze, ale ponownie poznaj swoich odbiorców.

yfeldblum
źródło
Tak, z wyjątkiem tego, że w dniu estońskim = päev i miesiąc = kuu, w Filippino są to: araw i buwan, w języku fińskim: päivä, kuukausi, w języku węgierskim: drzemka, hónap, w języku indonezyjskim: hari, bulan, w języku maltańskim: jum, xahar , po rumuńsku: zi, lună, po turecku: gün, ay, po wietnamsku: ngày, thang ... nie wspominając o wielu językach, w których miesiąc nie zaczyna się od m lub dzień nie zaczyna się od d (niemiecki: Monat, Tag ), a także języków, które nie używają niczego takiego jak alfabet łaciński.
Job
1
Cóż, „2011-02-02” jest w każdym razie mało ambitna ...;)
Martin
0

Ta sugestia jest prawdopodobnie bezużyteczna, ale widziałem miesiące pisane cyframi rzymskimi. Jasne, 3 / XI / 2011 może być 11 listopada lub 3 marca, ale myślę, że pierwsza interpretacja jest bardziej naturalna.

ggambett
źródło
1
Cyfry rzymskie "Naturalny?"
Wonko the Sane
@Wonko, „naturalny” w tym sensie, że w tym kontekście XI jest bardziej interpretowany jako miesiąc niż jako dzień. Przyznaję, że to niezwykle subiektywne.
ggambett
+1, myślałem sobie coś takiego. zgadzam się również z twoimi krytykami.
Job
Nigdy, nigdy nie widząc tego formatu, najpierw pomyślałem „literówka” lub „błąd tłumaczenia”, zanim dotarło do mnie „cyfry rzymskie”. Dopiero wtedy spróbuję odgadnąć znaczenie.
Wonko the Sane
Nie wspominając już o tym, że 3 / II / 2011 będzie interpretowany jako listopad.
MSalters
0

Powiedziałbym, że to zależy od tego, co robisz, ile masz kontroli nad danymi wejściowymi i czy gdzieś je przechowujesz?

Do przechowywania użyłbym tego, co sugerował Mike Dunlavey:

RRRRMMDDGGMMSS, gdzie godzina jest w UTC, to sposób, w jaki idę, ilekroć mam wybór, z podanych przez ciebie powodów. Kiedy nie mam wyboru, pozwalam użytkownikowi wybrać.

Nie zostawił tego jako odpowiedzi, więc zrobię to.

Jeszcze jedno: sprawdź poniższy zrzut ekranu, jak wpisać datę wygaśnięcia CC: http://www.ubercart.org/files/credit_card_checkout.jpg

Wspaniałą rzeczą w tym przykładzie jest to, że nie sprawia, że ​​myślisz. Używa zarówno liczb, jak i nazw dla miesiąca. Rozważyłbym użycie czegoś podobnego do danych wejściowych. Dla miesiąca podaj zarówno numer, jak i zlokalizowaną nazwę. Dla roku i dnia użyj numerycznych pól Up / Down lub pól kombi. Wtedy kontrola kalendarza również wydaje się sprytna.

Jak powiedziałem, to zależy. Do przechowywania: jeśli korzystasz z bazy danych, sprawdź, czy już zapewnia dobry jednoznaczny format danych. Jeśli używasz innej metody, sprawdź, czy „RRRRMMDDGGMMSS, gdy godzina jest w UTC”, pomaga. Aby przedstawić to użytkownikowi - weź pod uwagę, jakie kraje / lokalizacje mogą być zaangażowane, a następnie wybierz najprostszą reprezentację typu „Nie każ mi myśleć”. Rozważ też podanie opcji.

Na koniec sprawdź kilka fajnych produktów, które już robią coś podobnego, i spróbuj dowiedzieć się, jak to robią.

Praca
źródło
aa cholera, czytając zrzut ekranu myślałem, że rozmawiamy o 11 listopada ... tylko po to, aby zdać sobie sprawę, że dzień nie był konieczny, kiedy mówiliśmy o dacie ważności karty kredytowej: /
Matthieu M.
@Matthieu M., tak, to trochę wprowadza w błąd :) Jednak jeśli trzymasz CC w dłoni i masz zamiar wprowadzić dane, to może to bardziej pomaga niż boli. Gdyby były trzy pudełka - jedno na dzień, może to być mniej dwuznaczne.
Job
0

Nie ma uniwersalnego formatu daty i godziny dla użytkowników końcowych witryny. Nie ma również pojedynczej wartości daty i godziny, ponieważ wartość ta jest różna dla strefy czasowej klienta. Powinieneś używać globalizacji - jej ukierunkowania na dane, czas, walutę, kalendarz, formaty nubmerów w oparciu o kulturę użytkowników (można je otrzymać z akceptowanych języków przekazywanych z przeglądarki użytkownika lub przełącznika zaimplementowanego bezpośrednio w Twojej aplikacji). Niektóre interfejsy API (na przykład .NET) mają bezpośrednie wsparcie dla tych funkcji.

Do przechowywania daty i godziny w bazie danych użyj formatu uniwersalnego - UTC (uniwersalny czas współrzędnych).

Ladislav Mrnka
źródło
UTC nie jest tak uniwersalny: jeśli chcesz wziąć pod uwagę sekundy przestępne, powinieneś użyć TAI
mouviciel
-2

To niefortunne, że cała inteligencja w międzynarodowym świecie komputerów nie jest w stanie złamać tego szaleństwa.

Ani Microsoft, ani inni dostawcy nie rozważają dodania maski daty, która sprawiłaby, że Miesiąc wydawałby się wypełniony zerami, podobnie jak Dzień, ale jako trzy cyfry. Przyjęcie praktyki pomogłoby promować nową serię zmodyfikowanych formatów dat, które są matematycznie równoważne, pozostając jednocześnie łatwymi do zidentyfikowania i rozróżnienia w dowolnym z tradycyjnych układów dat. To jest:

  • 0 MM-DD-RRRR, np. 002-03-2016 dla 03,2016 lutego

  • DD-0MM-RRRR, np. 03-002-2016 na 03 lutego 2016 r

  • RRRR-0MM-DD, np. 2016-002-03 na 03.03.2016

  • RRRR-DD-0MM, np. 2016-03-002 (jeśli ktoś chciałby go użyć!)

Wydaje się to zbyt łatwe, aby to naprawić ... Myślę, że proste po prostu nie sprzedają się dobrze.

FBTHFL
źródło
2
Mogę tylko powiedzieć: xkcd.com/927 Mamy już standard ISO dotyczący dat i nie potrzebujemy innego.
Simon B