Есть ли какая-то инженерная причина, почему это так? В случае СУБД мне было интересно, что она как-то связана с производительностью, поскольку, например, «ГОД» более специфичен, чем «МЕСЯЦ»: у вас есть только один год 2000, но каждый год «Январь», что облегчит / ускорит фильтрацию / сортировку чего-либо по году в первую очередь, и поэтому год идет первым.
Но я не знаю, имеет ли это смысл ... Есть ли вообще причина?
sql
engineering
rdbms
date-format
lucaswxp
источник
источник
asctime
прежнему широко используются во многих местах. Приятно, что RFC 3339 и ISO 8601 постепенно вытесняют старые форматы, и они, безусловно, должны использоваться в будущем. В более общем смысле я бы сказал, что базовая форма ISO 8601 (обычная ГГГГММДД без символов-разделителей) на самом деле встречается реже, чем некоторые другие формы, такие как ГГГГ-ММ-ДД.Ответы:
Таким образом, даты могут быть легко отсортированы в виде строк с использованием правил сортировки по умолчанию (т.е. лексикографическая сортировка ).
По этой же причине месяц и день указываются с использованием двух цифр (при необходимости добавляется начальный ноль).
Фактически это один из форматов даты, определенных ISO 8601 . Этот стандарт также определяет формат даты и времени
2015-03-27T15:26:40Z
, который также можно сортировать в виде строк.Тем не менее, YYYYMMDD имеет дополнительное преимущество, заключающееся в том, что он позволяет легко (без подстрок или замены символов) анализировать строку как целое число и по-прежнему использовать порядок по умолчанию для целых чисел.
источник
Пока не упоминается, но вы быстро замаскируете порядок внутри YYYY. Это уже тысячелетия, века, десятилетия, годы. То есть YYYY уже заказан от самого длинного периода к самому короткому периоду. То же самое касается ММ и ДД, так работает система счисления.
Таким образом, чтобы сохранить порядок между полями в соответствии с порядком в полях, единственным вариантом является ГГГГММДД.
Как отметил Захбаз и Арсений Мурзенко, форматы ГГГГММДД легко сортируются. Это не случайное совпадение, это прямое следствие того, что поля с наибольшей длительностью ставятся первыми (и с фиксированной длиной; здесь мы вводим проблему Y10K).
источник
Да. Эти части программного обеспечения будут использовать ISO 8601 .
ISO 8601 имеет ряд преимуществ перед другими форматами даты:
1_file, 10_file, 2_file
).Что касается того, почему ISO 8601 существует в первую очередь, это потому, что люди находили форматы дат неоднозначными и запутанными при обмене данными между странами / системами, и им нужно что-то однозначное.
Обоснование см. Во введении спецификации .
Стандарт определяет «базовые» вариации как минимизацию использования разделителей. Итак,
YYYYMMDD
является основной альтернативой расширенному форматуYYYY-MM-DD
.источник
Это потому, что все другие способы сделать это неоднозначны.
01/02/2003 что это значит? Второго января 2003 года? Или в Европе: 1 февраля 2003 года? Это становится еще хуже, если вы используете две цифры в году, как 01/02/03.
Вот почему вы используете ГГГГММДД, это соглашение, которое позволяет нам четко сообщать о датах, 20030201 как дата всегда ясна. (и это облегчает сортировку)
(Теперь не храните это как целое число 20 миллионов 30 тысяч двести 1. пожалуйста, хорошо? Довольно пожалуйста?)
источник
Пусть t1 и t2 будут разными целыми числами, которые представляют два раза записанные в формате ГГГГММДД. Тогда t1 <t2 означает, что t2 произошло после t1.
Вы теряете этот порядок с первым форматированием DD и MM.
ИСО, ИМО, единственный разумный формат.
источник
feature_test_macros(7)
, например, наличие_POSIX_C_SOURCE > 200809L
средств, поддерживающих функции из POSIX.1-2008 ...Одна вещь, не упомянутая, состоит в том, что в интерактивных входах этот формат позволяет управлять вводом.
Система не может знать, имеет ли месяц 28, 29, 30 или 31 день, не зная конкретного года и месяца. Когда в интерактивном режиме ввода указывается, что год и месяц появляются первыми, он может проверить, находится ли день (вставленный последним) в допустимом диапазоне.
Конечно, вопрос был в основном о формате даты, но можно утверждать, что формат даты следует форматированию, представленному пользователю.
источник
ГГГГММДД заказывает даты так же, как вы заказываете номера: сначала самая значительная часть. ММДДГГГ было бы похоже на запись «сто двадцать три» как «двадцать сто три».
В нашей культуре у нас есть естественное понимание MMDDYYYY, потому что, как люди, мы осознаем время, и годы прогрессируют медленно. Мы вообще знаем, какой это год. Видеть год редко имеет значение, поэтому мы отодвигаем его назад. Месяцы сменяются достаточно быстро, чтобы сохранить свое значение. Другие культуры справляются с этим по-разному. Большая часть мира предпочитает ДДММГГГГ.
источник
Сортировка была упомянута, но наиболее полезной причиной для этого является сравнение их как «строк», и да, 26-символьная временная метка упорядочена аналогично.
Я знаю, что такие сравнения необходимы для сортировки, но в целом это полезно для сортировки из 2 элементов.
Я работал над проектами, где это не было принято, и да, программисты пытались (со смешанными результатами) сравнивать даты как строки.
Хорошее форматирование для клиентской стороны или для набора текста.
источник
Этот формат делает алфавитный порядок строк идентичным хронологическому порядку дат. Это полезно, потому что многие инструменты обеспечивают алфавитное упорядочение, например, файлов по имени, но не позволяют анализировать произвольно отформатированные даты по именам файлов и сортировать по ним.
источник
Это об ограниченности. Представьте YEAR, MONTH и DAY в качестве параметров, в формате YYYYMMDD каждый параметр является более строгим, чем предыдущий.
Поэтому, если вы хотите найти что-то, что произошло в 1970 году, вы можете сделать это путем поиска строки, начинающейся с
"1970*"
, но если вы помните, какой месяц был, вы можете добавить месяц как"197005*"
. Таким образом, каждый «параметр» даты дает вам более конкретную информацию.Это единственный способ перейти от менее конкретной информации (
"1970*"
) к более конкретной информации ("19700523"
).источник
1970*
и197005*
представляют синтаксис подстановочного знака «glob», то вы можете выполнить поиск по группе дат MMDDYYYY, выполнив поиск по запросу glob*1970
или05*1970
. Ваш ответ может быть неявным, предполагая некоторые дополнительные ограничения, которые вы не упомянули явно, и может быть улучшен путем объяснения вашего предположения.Это удобочитаемый формат для ввода и вывода, он не обязательно хранится таким образом.
Более трети всех языков программирования были разработаны в стране, где основным языком является английский, и большинство современных придерживаются стандарта некоторого описания - международного стандарта дат ISO 8601 .
Больше информации: (TMI?)
По мере изменения времени, обычно вперед, сначала увеличиваются дни, а затем месяцы и, наконец, годы - может быть легче понять, если бы у нас были десятичные даты (и десятичное время ) - с течением времени число становится больше. Людям просто проще взглянуть на число и сравнить его с другой датой.
Компьютер не заботится о том, какую структуру вы хотите использовать, и на большинстве (но не на всех ) компьютерах используется двоичная логика - база e на самом деле имеет самую низкую экономию радиуса, но не является ни самой эффективной, ни самой простой для полной последовательности .
Фактический формат ввода и вывода даты варьируется в зависимости от страны и определяется локализацией , в то время как ГГГГММДД может показаться наиболее целесообразным, и то, к чему вы привыкли, сегодня не является универсальным , как и в прошлом. дольше времени, но даже сегодня римские цифры которые обычно используются для дат .
Зная год вперед, вы узнаете, сколько дней в году - самое большое изменение продолжительности года. Он сообщает вам заранее количество дней в каждом месяце (для проверки ошибок при вводе), разрешая ввод дня, который может потребоваться вначале, чтобы поддержать вас, если следующий год не согласуется с вашим вводом - возможно, затрудняя доступный ввод , Это также имеет значение в отношении формата календаря . Смотрите также календарь компьютерщиков с его десятичными звёздами.
Что касается компьютера, то он, вероятно, будет использовать время эпохи UNIX , количество секунд, прошедших с 00:00:00 всемирного координированного времени (UTC), четверг, 1 января 1970 года, где каждый день рассматривается так, как если бы он содержал ровно 86400 секунд. Смотрите также юлианский день . Эгоцентричный человек предпочитает формат ГГГГММДД , а МАС рассматривает год как юлианский год, равный 365,25 дням (31,5576 млн. Секунд), если не указано иное.
источник
Другое использование, которое я видел для этого представления, заключается в том, что вы можете хранить даты в виде целых чисел (то есть в базе данных), используя только 4 байта на дату. Использование YYYYMMDD означает, что целочисленные сравнения (часто это одна машинная инструкция) имеют тот же результат, что и сравнения на представленную дату. И это печатает в меру читабельно. И ни для чего из этого не требуется никакого кода или специальной поддержки вообще в любой основной среде программирования.
Если эти вещи представляют собой большую часть того, что вам нужно делать с датами, и вам нужно делать много, то этот формат очень привлекателен.
Для сравнения, даты в распространенных форматах, таких как ДД / ММ / ГГГГ, принимают 10 байтов в виде строк символов ASCII. Строки YYYYMMDD уменьшают это значение до 8 и получают преимущество «сравнение представлений дает тот же результат, что и сравнение дат», но даже тогда сравнение на основе строк является посимвольным, а не однозначным сравнением.
источник
По этой же причине Луна состоит из зеленого сыра: это не так. В большинстве случаев формат по умолчанию - это какая-то локализованная строка. Иногда используется формат ISO, но обычно с черточками для лучшей читаемости.
YYYYMMDD
(или%Y%m%d
наstrftime
языке) редко используется по умолчанию. Чтобы быть справедливым, я уверен, что видел это, но я не могу думать о примере прямо сейчас.Дата Unix (основные утилиты GNU)
Выход:
питон
выход:
С
Выход:
C ++
Выход:
Javascript
Выход:
SQLite
Выход:
LibreOffice Calc
Gnumeric
OnlyOffice
Python + NumPy
Выход:
Питон + панды
Выход:
Программная инженерия
apport.log
alternatives.log
Чашки / access.log
системный журнал
источник
Do 27. Sep 22:27:09 CEST 2018
здесь.)Дополнительное преимущество, не упомянутое до сих пор, состоит в том, что желаемое квантование (назначение точного значения как принадлежащего тому же общему диапазону значений) является относительно простой и быстрой единственной операцией.
Предположим, вы пишете отчет, который суммирует события сегодня, такие как сумма и количество продаж. Дата и время продажи хранятся в формате ГГГГММДДЧЧММИС, вам просто нужно сохранить крайние левые 8 символов (если это строка) или целочисленное деление (т. Е. Пол), чтобы сократить дату и время до даты продажи.
Точно так же, если вы хотите продажи за месяц, оставьте только 6 самых левых цифр или разделите на 100 000 000
Конечно, вы можете утверждать, что возможны любые манипуляции со строками, дата-время для продаж «12-25-2018 12:34 pm» может быть подставлена в подстроки и манипулирована несколько раз, чтобы получить месяц и год. В числовой форме 122520181234 можно было бы разделить и изменить, умножить и еще немного разделить, и, в конечном счете, также создать месяц и год ... ... но код будет действительно трудно писать, читать, поддерживать и понимать.
И даже сложные оптимизаторы базы данных могут не иметь возможности использовать индекс по столбцу для предложения where, если форма даты была MM / DD / YYYY, но вырезана и сложена обратно вместе. Для сравнения, хранение представления ГГГГММДД и отсутствие декабря 2018 года приводит к тому, что предложения типа
dateasstring LIKE '201812%'
илиdateasint BETWEEN 20181200 and 20181299
что-то, что может легко использоваться для индексаТаким образом, если не было выделенного типа данных для дат, а строковое / числовое представление было единственным выбором, используя и сохраняя времена в некотором представлении «самый длинный интервал слева направо к самому короткому интервалу» Право имеет довольно много преимуществ для простоты понимания, манипулирования, хранения, поиска и обслуживания кода
источник