Какой формат лучше всего подходит для представления одного дня?

StackOverflow https://stackoverflow.com/questions/217853

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top