Чи є якісь технічні причини, чому в програмуванні формат дати за замовчуванням - YYYYMMDD, а не щось інше?


118

Чи є інженерна причина, чому це так? Мені було цікаво у випадку з RDBMS, що це має щось спільне з продуктивністю, оскільки "РІК" є більш конкретним, ніж "МІСЯЦЬ", наприклад: у вас є лише 2000 рік, але кожен рік маєте "січень", що полегшило б / швидше фільтрувати / сортувати щось спочатку за роком, і саме тому рік приходить першим.

Але я не знаю, чи це насправді має сенс ... Чи є взагалі якась причина?


14
@IMil Нам це може не сподобатися, але досить часто вони зберігаються як рядки.
Honza Brabec

14
@candied_orange Це було б дивно, особливо у випадку побачень.
glglgl


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

31
У програмуванні формат дати за замовчуванням "YYYYMMDD"? Було б добре, якби це було правдою, але це точно не скрізь. RFC 822 і RFC 850, а також ANSI C asctime, як і раніше, широко використовуються у багатьох місцях. Приємно, що RFC 3339 та ISO 8601 поступово витісняють старі формати, і це, звичайно, те, що слід використовувати вперед. Більш загально, я б сказав, що основна форма ISO 8601 (звичайний YYYYMMDD без розділових символів) насправді зустрічається рідше, ніж деякі інші форми, наприклад, YYYY-MM-DD.
Даніель Приден

Відповіді:


386

Таким чином, дати можна легко сортувати як рядки, використовуючи правила сортування за замовчуванням (тобто лексикографічне сортування ).

З цього приводу і місяць, і день визначаються двома цифрами (додаючи нульовий нуль, якщо потрібно).

Фактично це один з форматів дати, визначений ISO 8601 . Цей стандарт також визначає формат дати та часу 2015-03-27T15:26:40Z, який також можна сортувати як рядки.

Однак YYYYMMDD має додаткову перевагу, завдяки чому легко (без підрядів чи заміни символів) розбирати рядок як ціле число, та все ж використовувати замовлення за замовчуванням на цілі числа.


90
@lucaswxp: Якщо ви пишете порівняння з особливим регістром для рядків за певною схемою, можна, звичайно, зробити так, як хочете. Вся справа в тому, що схема розроблена таким чином, що лексичний порядок (як і лексичний порядок, що усвідомлює число) також є логічним порядком, тому немає потреби в налаштуваннях.
Дедуплікатор

19
@lucaswxp Рядок дати не може бути в пам'яті. Практичний приклад: у вас є файл csv, вже відсортований за датою ISO та мільйонами + рядків на рік. І ви хочете повернути лише рядки між певними датами. Ви можете читати файл за рядком (рядок за рядком), поки не досягнете своєї першої дати, а потім завантажуйте рядки в пам'ять, поки не досягнете останньої дати. Ви можете пропустити решту файлів. Але якщо ви збережете дату як якийсь інший формат, або відсортовану лише за роками, вам доведеться прочитати записи, що мають цілий рік, перед тим, як закрити файл.
Том А. Вібето

48
Зауважте, що тире в ISO 8601 необов’язково, тому YYYYMMDD відповідає ISO 8601.
Martin Ba

32
@Benoit Уже зроблено пропозицію щодо вирішення проблеми Y10K. Якщо ми все ще використовуємо ту саму епоху, ми переходимо до AYYYYYMMDD до Y100K, який буде BYYYYYYMMDD, CYYYYYYMMDD, DYYYYYYYYMMDD, EYYYYYYYYYMMDD. Цей провідний префікс альфа забезпечує правильний порядок сортування (за умови, що "A0YYYY ..." тощо) є недійсними представленнями, якщо будь-які дати "РРРР ..." все ще використовуються). У якийсь момент, коли кількість цифр року розділиться на три, ми почнемо додавати три цифри щоразу, коли ми змінюємо альфа-префікс, щоб переконатися, що нам не вистачає букв до теплової смерті Всесвіту.
Монті Хардер

35
Важливо зазначити, що в такому форматі сортування не просто "простіше". Лексичне (на основі символів) сортування стає еквівалентним тимчасовому сортуванню, що означає, що ви можете сортувати тимчасово без аналізу .
jpmc26

135

Ще не згадано, але ви швидко промальовуєте замовлення всередині РРРР. Це вже тисячоліття, століття, десятиліття, роки. Тобто, РРРР вже впорядковано від найдовшого до найкоротшого періоду. Те саме стосується MM та DD, саме так працює система числення.

Отже, щоб зберегти порядок між полями узгодженим із порядком у полях, єдиний варіант - YYYYMMDD

Як зауважили zahbaz та Арсеній Мурзенко, формати YYYYMMDD легко сортуються. Це не випадковий збіг обставин, це прямий наслідок того, що на перше місце покладіть поля на найдовшу тривалість (і дотримуйтесь фіксовану довжину; ми вводимо тут проблему Y10K.)


34
Хоча ви, можливо, жартуєте, цей код може серйозно переслідувати нас через 8000 років. Кодекс живе довше, ніж хто-небудь очікує ... 😓
декад

15
@deceze ISO8601 вже має положення для п'ятизначного року, але було б цікаво побачити, які реалізації DateTime в даний час це дозволяють.
Зак Фарагер

4
@ZacFaragher, я впевнений, що у нас буде достатньо часу, щоб реалізувати це пізніше, не потрібно поспішати, правда ...?
ilkkachu

51
@deceze Чому ти розморозив мене - ти придумав, як вилікувати рак? Ні, це 9999 рік, і ви знаєте COBOL.
користувач3067860

6
Ви можете поправити друк. Слово тисячоліття , множина тисячоліття , обов'язково пишеться з подвійним N, щоб відповідати подвійному N у щорічному від латинського annus за рік. Якщо ви неправильно написали його лише одним N, тепер він нещасливо відповідає сімейству N з анального з латинського ануса з тим самим значенням, що і його позивне слово в англійському спорті. Коротше кажучи, вам завжди потрібно вимовляти це так, що ви говорите про тисячі років, а не про тисячі прорізів. :)
tchrist

57

Чи взагалі є якась причина?

Так. Ці програми будуть використовувати ISO 8601 .

ISO 8601 має ряд переваг перед іншими форматами дати:

  • Це стандарт із специфічним документом :)
  • Це однозначно. mm / dd / yyyy та dd / mm / yyyy можуть бути заплутаними, якщо не минуло 13-го дня.
  • Він лексикографічно впорядковується у порядку зростання, тому не потрібна спеціальна логіка сортування дати. Це особливо корисно для імен файлів, де лексикографічне сортування чисел часто плутає (наприклад 1_file, 10_file, 2_file).
  • Він передбачає чотиризначний рік та місяць та рік із зануренням. Це дозволяє уникнути проблеми 2000 року та інших неясностей.

Що стосується того, чому ISO 8601 існує в першу чергу, це тому, що люди знаходили формати дати неоднозначними та заплутаними під час обміну даними між країнами / системами, і їм було потрібно щось однозначне.

Для обґрунтування див . Вступ специфікації .

Хоча рекомендації та стандарти ISO в цій галузі доступні з 1971 року, різні форми числового представлення дат і часу були загальноприйнятими для різних країн. Якщо подібні уявлення міняються через національні кордони, може статися неправильне тлумачення значення числівників, що призводить до плутанини та інших наслідкових помилок чи втрат. Метою цього Міжнародного стандарту є усунення ризику неправильного тлумачення та уникнення плутанини та її наслідків.

...

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

Стандарт визначає "основні" варіанти як мінімізацію використання роздільників. Отже, YYYYMMDDє базовою альтернативою розширеному формату YYYY-MM-DD.


4
Я не знав, що ISO 8601 також дозволяє YYYYMMDD крім YYYY-MM-DD.
keuleJ

iso.org/iso-8601-date-and-time-format.html начебто вказує на те, що "Розширений формат" YYYY-MM-DD - єдиний формат для 8601?
Оскар Аустегард

3
@keuleJ Мінімізація використання розмежувачів, таких як YYYYMMDD, а не YYYY-MM-DD, називається "базовим" варіантом формату в стандарті ISO 8601.
Василь Бурк

Ще дві переваги ISO 8601: (a) Легкий розбір машиною без символу SPACE і не локалізованого тексту, і (b) Легкий для інтуїції людей у ​​різних культурах, коли рік, що настає вперше, легко розпізнати (якщо він сучасний), і не припускаючи англійської мови.
Василь Бурк

55

Це тому, що всі інші способи зробити це неоднозначно.

01.02.2003, що це означає? Другий січень 2003 року? Або в Європі: 1 лютого 2003 року? Це стає ще гірше, якщо ви користуєтесь двома цифрами за рік, як 01.02.03.

Ось чому ви використовуєте YYYYMMDD, це умова, яка дозволяє нам чітко спілкуватися про дати, 20030201 як дата завжди зрозуміла. (і це полегшує сортування)

(Тепер не продовжуйте зберігати це як цілі 20 мільйонів 30 тисяч 2 сотні і 1. будь ласка, добре? Досить будь ласка?)


14
"20030201 як дата завжди зрозуміла" : Це абсолютно не так. Це так само неоднозначно, як "01.02.2003", якщо ви не знаєте, що YYYYMMDD (або це YYYYDDMM або DDMMYYYY? ...) - це формат, який використовується. ВИНАГО потрібно знати формат дати; не існує «умовності», яка робить речі однозначними.
skomisa

6
@skomisa, що зовсім неправильно. ISO 8601 визначив міжнародний стандартний формат дати конкретно з вказаних вами причин. Жоден з інших форматів не є дійсними форматами дат і не був з 19880605
K. Alan Bates

11
@ K.AlanBates Ваша дата є неоднозначним , якщо не брати до уваги , що він повинен бути проаналізований в відповідно до ISO 8601
Гойо

16
20030201 20 березня 201AD, правда?
Девід Річербі

10
@Martijn, але специфічно для мови. У Туреччині це Şubat, а не лютий (Перш ніж ви думаєте, що ваш код працює, завжди перевіряйте Туреччину ).
NH.

19

Нехай t1 і t2 є цілими цілими числами, які представляють два рази, записані у форматі YYYYMMDD. Тоді t1 <t2 означає, що t2 стався після t1.

Ви втрачаєте це замовлення при першому форматуванні DD та MM.

ISO - ІМО - єдиний розумний формат.


1
За винятком того, що ви ніколи не зберігаєте це як ціле число, принаймні я ніколи цього не бачив і не вважав.
труба

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

19
@pipe - це мій досвід в галузі програмного забезпечення, що коли розумна людина захоче сказати "Але ти ніколи не зробиш X", завжди є хоча б один зустрічний приклад
Джозеф Роджерс,

5
@pipe При зберіганні даних не рідкість використання цілого числа yyyymmdd в якості основного / сурогатного ключа для таблиці дат.
soapygopher

4
@pipe, ну, порядковий номер зони DNS - це 32-бітове ціле число, яке потрібно збільшувати, коли зона змінюється. Хоча це може бути просто звичайне число, загальна ідіома полягає у використанні таких чисел, як 2018092601 ... Тоді є деякі цікаві визначення магічних чисел, описані в feature_test_macros(7), як-от наявність _POSIX_C_SOURCE > 200809Lзасобів, які підтримують функції POSIX.1-2008 ...
ilkkachu

12

Один момент, який не згадується, - це те, що на інтерактивних входах цей формат дозволяє контролювати введення.

Система не може знати, чи є в місяці 28, 29, 30 або 31 день, не знаючи конкретного року та місяця. Коли інтерактивне введення вказує на перший рік та місяць, він може перевірити, чи день (вставлений останній) знаходиться в дозволеному діапазоні.

Звичайно, питання стосувалося в основному формату дати, але можна стверджувати, що формат дати відповідає форматуванню, представленому користувачеві.


7

YYYYMMDD замовлення датується так само, як ви замовляєте номери: найзначніша частина спочатку. MMDDYYYY було б як написати "сто двадцять три" як "двадцять і сто три".

У нашій культурі ми природно розуміємо MMDDYYYY, оскільки ми, як люди, усвідомлюємо час, і роки прогресують повільно. Ми взагалі знаємо, який це рік. Бачити рік рідко має значення, тому ми відсуваємо його до спини. Місяці змінюються досить швидко, щоб зберегти свою важливість. Інші культури справляються з цим неоднаково. Більшість країн віддають перевагу DDMMYYYY.


62
Ви можете перефразовувати "нашу культуру", оскільки в моїй культурі це DDMMYYYY, тому це не "наша" культура, а лише ваша
slebetman

66
Вичерпна карта всіх країн, що використовують формат дати MMDDYYYY img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Перегрин

9
Здається, що це дивний аргумент: "Місяці змінюються досить швидко, щоб зберегти свою важливість" -> Чому б тоді не поставити день першим, оскільки це змінюється ще швидше?
Вім Деблауве

7
@JoelCoehoorn, це легко зробити це явним ("У нашій американській культурі"). "наші" / "ми" часто вживаються для позначення тут "спільноти обміну ставками".
AnoE

14
Саме так. Stackoverflow є міжнародним . Те, що ви базуєтесь в США, не говорить, не означає, а то і не робить більше ймовірним, що і інші. Ви не можете робити жодних припущень щодо місцевості ваших читачів, адже вони є по всьому світу. І більшість ваших читачів не будуть ні ви, ні ОП, а інші люди, які знайдуть вашу відповідь в Google. Цей самий коментар написаний на іншому континенті, ніж на тому, на якому вам трапляється жити. І хоча у нас є власні цікаві звички, ми, звичайно, не використовуємо MM / DD / YYYY ...
cmaster

6

Впорядкування було згадано, але, безумовно, найбільш корисною причиною цього є порівняння їх як "рядків", і так, часова мітка на 26 символів впорядковується аналогічно.

Мені відомо, що такі порівняння мають важливе значення для сортування, але це, як правило, корисно для 2-х елементів елементів.

Я працював над проектами, де це не було прийнято, і так, програмісти намагалися (зі змішаними результатами) порівняти дати як рядки.

Досить форматування призначене для клієнта або набору тексту.


5

Цей формат робить алфавітний порядок рядків ідентичним хронологічному порядку дат. Це корисно, оскільки багато інструментів забезпечують алфавітне впорядкування, наприклад, файлів за іменем, але ніяк не можна проаналізувати довільно відформатовані дати з імен файлів та сортувати їх.


4

Йдеться про обмеженість. Уявіть як параметри YEAR, MONTH та DAY, у форматі YYYYMMDD кожен параметр є більш обмежуючим, ніж попередній.

Отже, якщо ви хочете шукати щось, що трапилося в 1970 році, ви можете зробити це шляхом пошуку рядка, починаючи з "1970*", але якщо ви пам’ятаєте, з якого місяця ви можете додати місяць, як "197005*". Таким чином, кожен "параметр" дати дає вам більш конкретну інформацію.

Це єдиний спосіб перейти від менш конкретної інформації ( "1970*") до більш конкретної інформації ( "19700523").


3
Насправді не чудовий аргумент - такий же звичайний пошук речей, які відбуваються в конкретні місяці, а не в конкретні роки.
Кубічний

1
Якщо 1970*і 197005*представляє синтаксис підстановки «glob», то ви можете шукати купу дат MMDDYYYY, шукаючи глобул *1970або 05*1970. Ваша відповідь може неявно припускати деяке додаткове обмеження, яке ви прямо не згадали, і може бути покращене, пояснивши своє припущення.
Квомплусон

3
Це свого роду побічний ефект або інший спосіб опису порядку сортування ключів, згаданого іншими відповідями. Але це пояснення розпадається, якщо ви не обмежите його пошуком префіксів. (Простіше індексувати, але жодним чином не потрібно).
Пітер Кордес

Це також означає, що ви можете вибрати послідовність дат із відносно простими regexp's ...
Harper

1

Чому в програмуванні формат дати за замовчуванням - YYYYMMDD ...

Це людський читаний формат для введення та виведення, він не обов'язково зберігається таким чином.

Більше третини всіх мов програмування були розроблені в країні, де англійською мовою є основною мовою, а більшість сучасних дотримуються стандарту деякого опису - міжнародний стандарт на дати - ISO 8601 .

Більше інформації: (TMI?)

З часом, як правило, вперед, приріст днів спочатку, потім місяці, останні роки - це може бути простіше зрозуміти, якби у нас були десяткові датидесятковий час ) - з часом час число збільшується. Людям просто простіше подивитися на номер і порівняти його з іншою датою.

Комп'ютеру не важливо, яку структуру ви хочете використовувати, і в більшості (але не на всіх ) комп'ютерах використовується двійкова логіка - база e насправді має найнижчу економію, але не є найефективнішою та найпростішою для повної послідовності .

Фактичний формат введення та виведення дат змінюється залежно від країни та встановлюється локалізацією , тоді як YYYYMMDD може здатися, що це має найбільше сенс і бути тим, до чого ви звикли, не є універсальним сьогодні, і не було так раніше в минулому довше часу, але навіть сьогодні римські цифри які зазвичай використовуються для дат .

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

Що стосується комп'ютера, то, швидше за все, використовується час UNIX Epoch , кількість секунд, що минули з 00:00:00 Універсальний координований час (UTC), четвер, 1 січня 1970 року, де кожен день трактується так, ніби він містить рівно 86400 секунд. Дивіться також День Юліана . Формат YYYYMMDD просто відданий перевагу егоцентричним людям; IAU вважає рік юліанським роком 365,25 днів (31,5576 мільйонів секунд), якщо не вказано інше.


1
Насправді майже кожен чоловік і програмне забезпечення, якого я коли-небудь зустрічав, віддають перевагу якомусь іншому формату.
Гойо

1
Радий познайомитися! Я Дейв, і я віддаю перевагу YYYYMMDD
інженер з

0

Ще одне використання, яке я бачив для цього представлення, полягає в тому, що ви можете зберігати дати як цілі числа (тобто в базі даних), використовуючи лише 4 байти на дату. Використання YYYYMMDD означає, що цілісні порівняння (часто це одна інструкція з машини) мають той же результат, що і порівняння на представлену дату. І він друкується помірно по-людськи. І нічого з цього взагалі не вимагає коду чи спеціальної підтримки в будь-якому середовищі програмного забезпечення.

Якщо ці речі є більшістю того, що вам потрібно зробити з датами, і вам потрібно зробити це багато, то цей формат має велику привабливість.

Для порівняння, дати в таких форматах, як DD / MM / YYYY, приймають 10 байт як рядки символів ASCII. Рядки YYYYMMDD зменшують це до 8, а отримання "порівняння представлень має такий самий результат, як і порівняння дат", але навіть тоді порівняння на основі рядків є символом за символом, а не єдиним цілим числом порівняння.


2
Тривіально упакувати дату в три байти. Діапазон 0000 ~ 9999 вимагає 14 біт, 01 ~ 12 вимагає 4 біт, а 01 ~ 31 потрібно 5 біт, на суму 23 біт. Використовуючи також залишився біт у трибайтовій кількості, ви можете представити дати протягом 32 768 років, підтримуючи одноденну роздільну здатність. Це може бути використано, наприклад, для дозволення представлення дат у діапазоні 8191 року до нашої ери до 24576 року нашої ери. Упаковуючи біти як, скажімо, yyyyyyyyyyyyyymmmmddddd, десяткове представлення залишається прямо порівнянним (хоча воно не є читабельним прямо для людей, але кого цікавить фізичне зберігання бази даних?).
CVn

0

З тієї ж причини, що Місяць зроблений із зеленого сиру: це не так. У більшості випадків формат за замовчуванням - це якийсь локалізований рядок. Іноді використовується формат ISO, але зазвичай з тире для кращої читабельності. YYYYMMDD(Або %Y%m%dв strftimeпросторіччі) рідко використовується за умовчанням. Чесно кажучи, я впевнений, що це я бачив, але зараз не можу придумати приклад.

Дата Unix (основні утиліти GNU)

date

Вихід:

Wed Sep 26 22:20:57 CEST 2018

Пітон

import time
print(time.ctime())

вихід:

Wed Sep 26 22:27:20 2018

С

#include <stdio.h>
#include <time.h>

int main () {
   time_t curtime;

   time(&curtime);
   printf(ctime(&curtime));
   return(0);
}

Вихід:

Wed Sep 26 22:40:01 2018

C ++

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::ctime(&result);
}

Вихід:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Вихід:

Wed Sep 26 2018 23:15:22 GMT+0200 (CEST)

SQLite

SELECT date('now');

Вихід:

2018-09-26

LibreOffice Calc

введіть тут опис зображення

Гнумерний

введіть тут опис зображення

ТількиОфіс

введіть тут опис зображення

Python + numpy

import numpy as np
pd.datetime64('now')

Вихід:

numpy.datetime64('2018-09-26T21:31:55')

Python + панди

import pandas as pd
pd.Timestamp('now', unit='s')

Вихід:

Timestamp('2018-09-26 21:47:01.277114153')

Розробка програмного забезпечення

введіть тут опис зображення

apport.log

ERROR: apport (pid 9742) Fri Sep 28 17:39:44 2018: called for pid 1534, signal 6, core limit 0, dump mode 2

альтернативи.log

update-alternatives 2018-05-08 15:14:24: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz

чашки / access.log

localhost - - [28/Sep/2018:16:41:58 +0200] "POST / HTTP/1.1" 200 360 Create-Printer-Subscriptions successful-ok

syslog

Sep 28 16:41:46 pop-os rsyslogd:  [origin software="rsyslogd" swVersion="8.32.0" x-pid="946" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

10
щоб додати до вашого аргументу, скільки з них форматировано таким чином через налаштування користувачів на комп’ютері, на якому ви запустили сценарій?
Topher Brink

Перший насправді не "баш", це програма дат (і вона виводиться Do 27. Sep 22:27:09 CEST 2018тут.)
Paŭlo Ebermann

@ PaŭloEbermann Ви праві, я сподіваюся, що зараз краще. Як я вже говорив, багато з цих форматів локалізовані, тому фактичний формат, який ви бачите, залежатиме від ваших параметрів локалізації.
Гойо

3
Хоча точка цього відповіді справедлива для орієнтованих на кінцевих користувачів додатків, не так для обміну даними між системами, серіалізації даних, протоколів повідомлень / даних, ведення журналів, відстеження, налагоджувачів тощо. Стандарт ISO 8601 швидко стає нормою для таких застосувань, спрямованих на системних адміністраторів та програмістів. Дані для міжнародних або локально-агностичних сценаріїв.
Василь Бурк

@BasilBourque Спасибі, я додав випадкову вибірку журналів, які знайшов у власній системі. У мене немає прикладів інших типів під рукою. Але я не думаю, що тенденція до дефолту до ISO 8601 у конкретних областях робить його базовим варіантом "типовим у програмуванні" на тлі величезної кількості програмного забезпечення, яке за замовчуванням застосовується до інших форматів.
Гойо

-1

Додатковою перевагою, про яку не було сказано поки що, є те, що бажане квантування (присвоєння точного значення як належності до одного загального діапазону значень) є відносно легкою та швидкою однократною операцією.

Припустимо, ви пишете звіт, який підсумовує події сьогодні, як сума та кількість продажів. Дата та час продажу зберігаються як YYYYMMDDHHMISS, вам потрібно просто зберегти крайній лівий 8 символів (якщо це рядок) або ціле ділення (тобто підлогу) на 1 000 000, щоб зменшити час вашої дати до дня продажу.

Так само, якщо ви хотіли продажів за місяць, ви зберігаєте лише найменші ліві 6 цифр або ділите на 100000000

Звичайно, ви можете стверджувати, що можливі будь-які маніпуляції з рядками, а дата дати продажу "12-25-2018 12:34 вечора" може бути підредагована і маніпульована кілька разів, щоб отримати місяць і рік. У числовій формі 122520181234 можна було б розділити і модифікувати, помножити та розділити ще кілька, а в кінцевому підсумку також створити місяць і рік .. .. але код було б дуже важко написати, прочитати, підтримувати та розуміти ..

І навіть складні оптимізатори баз даних можуть не в змозі використовувати індекс у стовпці для пункту «де», якщо форма дати склала MM / DD / РРРР, але зібрана і зведена разом. Для порівняння, зберігання представлення YYYYMMDD та бажання грудня 2018 року призводять до того, де можуть бути використані пункти ilk dateasstring LIKE '201812%'або dateasint BETWEEN 20181200 and 20181299- щось, що може бути індексом

Таким чином, якщо не було виділеного типу даних для дат і подання рядків / числових даних, це був єдиний вибір, використання та зберігання часу в деякому поданні найдовшого інтервалу "зліва-зліва" до "найкоротшого інтервалу" на " право має досить багато переваг для зручності розуміння, маніпуляцій, зберігання, пошуку та обслуговування коду

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.