Какой формат лучше всего подходит для представления одного дня?
-
03-07-2019 - |
Вопрос
Как представить время начала и окончания одного дня?
Используя 23 октября 2008 года в качестве примера, начинается ли он 2008-10-23 в 12:00: 00 утра и заканчивается 2008-10-23 в 11:59: 59 вечера?
Решение
Ваша запись странная. Я бы предложил стандартный способ указания диапазона полного дня:
2008-10-23 00:00:00 и окончание 2008-10-23 23:59:59
Другие советы
Я хотел бы процитировать один сайт, http://www.cl.cam.ac.uk /~mgk25/iso-time.html
Международным стандартным обозначением времени суток является
hh:mm:ss
где hh - количество полных часов, прошедших с полуночи (00-24), mm - количество полных минут, прошедших с начала часа (00-59), а ss - количество полных секунд с начала минуты (00-60).Если значение часа равно 24, то минутное и секундное значения должны быть равны нулю.
Примечание:Значение 60 для ss иногда может потребоваться во время вставленной високосной секунды в атомной шкале времени, такой как Всемирное координированное время (UTC).Одна високосная секунда 23:59:60 вводится в шкалу времени UTC каждые несколько лет, как объявлено Международной службой вращения Земли в Париже, чтобы время UTC не отклонялось более чем на 0,9 секунды от менее постоянной астрономической шкалы времени UT1, которая определяется фактическим вращением Земли.На практике вы вряд ли увидите часы, показывающие 23:59:60.Большинство синхронизированных часов повторно синхронизируются с UTC через некоторое время после наступления високосной секунды или временно замедляются вблизи времени високосных секунд, чтобы избежать каких-либо сбоев, которые в противном случае могла бы вызвать временная метка вне диапазона.
Примером времени является
23:59:59
который представляет время за секунду до полуночи.
Как и в случае с обозначением даты, разделяющие двоеточия также могут быть опущены, как в
235959
и точность может быть уменьшена, если опустить секунды или как секунды, так и минуты, как в
23:59, 2359, or 23
Также можно добавить доли секунды после десятичной точки или запятой, например, время за 5,8 мс до полуночи можно записать как
23:59:59.9942 or 235959.9942
Поскольку каждый день начинается и заканчивается с полуночи, доступны два обозначения 00:00 и 24:00, чтобы различать две полуночи, которые могут быть связаны с одной датой.Это означает , что следующие два обозначения относятся точно к одному и тому же моменту времени:
1995-02-04 24:00 = 1995-02-05 00:00
В случае, если требуется однозначное представление времени, 00:00 обычно является предпочтительным обозначением полуночи, а не 24:00.Цифровые часы показывают 00:00, а не 24:00.
Стандарт ISO 8601 не уточняет, указывают ли его обозначения момент времени или период времени.Это означает, например, что ISO 8601 не определяет, относится ли 09:00 к точному окончанию девятого часа дня, или к периоду с 09:00 до 09:01, или к чему-либо еще.Пользователи стандарта должны каким-то образом договориться о точной интерпретации обозначения времени, если это должно вызывать какое-либо беспокойство.
Если дата и время отображаются в одной строке, то всегда пишите дату перед временем.Если значение даты и времени хранятся вместе в одном поле данных, то стандарт ISO 8601 предполагает, что они должны быть разделены латинской заглавной буквой T, как в 19951231T235959.
Замечание для читателей из США .:
Указанное здесь 24-часовое обозначение времени уже на протяжении десятилетий является стандартом де-факто в письменной речи во всем мире.Единственным исключением являются несколько англоязычных стран, где до сих пор широко используются обозначения с часами от 1 до 12 и дополнения типа “утра“ и ”вечера".Общепринятая 24 - часовая международная стандартная система счисления в настоящее время широко используется даже в Англии (например,в аэропортах, кинотеатрах, расписании автобусов / поездов и т.д.).В большинстве других языков даже нет таких сокращений, как “a.m.” и “p.m.”, а обозначение 12 часов, безусловно, вряд ли когда-либо используется в Континентальной Европе для записи или отображения времени.Даже в США военные и компьютерные программисты уже давно используют 24-часовую систему счисления.
Староанглийская 12 - часовая нотация имеет много недостатков , таких как:
- Это длиннее, чем обычная 24-часовая запись.
- Людям требуется несколько больше времени, чтобы сравнить два раза в 12-часовой системе счисления.
- Непонятно, как представлены 00:00, 12:00 и 24:00.Даже энциклопедии и руководства по стилю содержат противоречивые описания, и распространенным быстрым решением, по-видимому, является полное исключение “12:00 утра / вечера“ и написание вместо этого ”полдень“, ”полночь“ или ”12: 01 утра / вечера", хотя слово “полночь” по-прежнему не проводит различия между 00:00 и 24:00 (полночь в начале или конце данного дня).
- Из-за этого люди часто думают, что следующий день начинается с переполнения с "12:59 утра" до “1:00 ночи", что является распространенной проблемой не только тогда, когда люди пытаются запрограммировать таймер видеомагнитофонов вскоре после полуночи.
- Это нелегко сравнить с операцией сравнения строк.
- Для неосведомленных не сразу ясно, начинается ли время между “12:00 утра” и “13:00 утра” в 00:00 или в 12:00, т.е.английская 12-часовая нотация более сложна для понимания.
Пожалуйста, считайте, что 12 часов - это пережиток средневековья, когда использовались римские цифры, цифра ноль еще не была изобретена, а аналоговые часы были единственной известной формой отображения времени.Пожалуйста, не используйте его сегодня, особенно в технических приложениях!Даже в США широко уважаемое Чикагское руководство по стилю теперь рекомендует использовать в публикациях международные стандартные обозначения времени.
Конечно, если вы просто хотите представлять 1 день, вам вообще не нужно указывать время - тем более, что это поднимает такой уровень дискуссии о том, когда день начинается или заканчивается. По моему опыту, обработка дат обычно достаточно сложна, без каких-либо дополнительных сложностей.
Сегодня 20 октября 2008 года - больше никакой информации не требуется.
Или я что-то упустил?
Октябрь.23 начинается в 2008-10-23 12 утра и заканчивается в 2008-10-24 12 утра — день заканчивается в тот же момент, что и следующий.Самая последняя секунда начинается в 11:59:59 вечера, но у вас еще есть целая секунда до окончания дня.
Определением дня, который вы упоминаете в вопросе, является любое время, которое > = 2008-10-23 00:00:00 и < 2008-10-24 00:00:00.
Если бы вы использовали математическую интервальную нотацию, вы бы написали это как
[2008-10-23 00:00:00, 2008-10-24 00:00:00)
[ означает включение, а ) означает до, но не включая.
Таким образом, вам будет проще для пользователей и для себя.
Это зависит от того, что вы подразумеваете под днем. К сожалению, обработка дат всегда сложнее, чем кажется.
Чтобы преобразовать ваш пример в 24-часовой формат даты ISO, вы должны сказать:
2008-10-23 00:00:00 - 2008-10-23 23:59:59
Однако, в зависимости от того, интерпретируете ли вы диапазон как включающий или исключающий, который может пропустить последнюю секунду дня *. Программисты обычно предпочитают оставить верхнюю границу исключительной, поэтому вы бы выбрали:
2008-10-23 00:00:00 - 2008-10-24 00:00:00
Или, как более приятный способ заявить о себе, если он поддерживается (или для удобства чтения):
2008-10-23 00:00:00 - 2008-10-23 24:00:00
*: на самом деле возможно больше, чем один. Если промежуток представляет день в часовом поясе UTC (или другой часовой пояс, связанный с ним, что вполне вероятно), иногда в конце дня, 23:59:60, может быть дополнительная «високосная секунда» в бессмысленном попытка держать UTC в соответствии с сидерическим временем. Следующая високосная секунда запланирована на конец этого года. Однако многие системы игнорируют дополнительные секунды, потому что они глупые и раздражающие.
Если вы хотите представлять «календарный день» независимо от часовых поясов, лучше всего выбирать номер дня по Юлиану. Сегодня 2454760.