Размышляя о дате и времени - сегодня полночь в прошлом или будущем?

9

Это всегда загадка для меня - и я понимаю, что это не является строго проблемой в программировании или разработке программного обеспечения, но кажется, что она является достаточно распространенной в нашей области.

Например, если бы я должен был установить дату истечения срока действия как 2011-04-08 00:00:00 - и учитывая, что мое текущее местное время 8:45 уже 8-го числа - я уже истек? Или мне еще полдня осталось?

Существуют ли универсальные стандарты, которым «принадлежит» конец дня?

Или я должен взять лист у британских военных и сказать, что день заканчивается в 23:59:59 и начинается в 00:00:01 и что нет полуночи?

HorusKol
источник
подождите, подождите, где ваше местоположение? какая дата сейчас? 08 или 07?
Sufendy
sry - прояснил, что я уже восьмого (я в Аделаиде, SA)
HorusKol
1
Таким образом, вы в основном спрашиваете, 00:00:00 меньше или больше, чем 10:45:00?
Мартин Йорк
Я бы взял лист. Многие организации, которые работают с расписаниями, избегают 00:00:00 (и 12:00:00). Существует также некоторая путаница в отношении обозначений AM / PM для тех стран, которые не используют 24-часовые часы.
dbasnett
В некоторых контекстах 24:00:00используется для описания полуночи в конце дня.
CodesInChaos

Ответы:

17

Я думаю, что в программировании (oracle и php, не уверен насчет других языков), полночь - это начало дня. Например, если вы усечете (sysdate), вы получите 2011-04-08 00:00:00, которое является нашим прошлым.

поэтому, когда часы изменились с 23:59:59 на 00:00:00, дата фактически изменилась с 2011-04-08 на 2011-04-09

Sufendy
источник
2
Да, день переносится в полночь, то есть 00:00:00.
быстро,
Это правильно AFAIK. Одна путаница может заключаться в том, что в обычной речи «полночь сегодня», вероятно, означает полночь в конце сегодняшнего дня, потому что это более вероятно, когда люди ложатся спать, чем после того, как они просыпаются.
Джек В.
3

Приложение к ответу @Phelios, если у вас есть время, например 00:00:00, это не обязательно точно полночь. Скорее, это бесконечно большой набор моментов времени, все из которых имеют максимальное расстояние <1 секунды друг к другу. Например, все 00: 00: 00.345, 00: 00: 00.567 и 00: 00: 00.842 явно лежат на новой дневной стороне полуночи, но будут сокращены до «00:00:00» для целей отображения. Точно так же 23: 59: 59: 899 лежит на старой стороне полуночи. Итак, сама полночь - это бесконечно короткий промежуток времени между днями, которые вы никогда не достигнете на практике.

Т-Bull
источник
Это один раз, когда важно выявить разницу между теорией и «предполагаемой» практикой : на практике пользователь, печатающий дату / время, едва ли мог бы печатать секунды; не говоря уже о миллисекундах. На практике устройство синхронизации, которое определяет время события, может не поддерживать миллисекунды. На практике, даже если устройство синхронизации поддерживает миллисекунды, нет никакой гарантии, что формат хранения по какой-то причине не округляет / усекает часть времени.
Разочарован
1

Эта проблема аналогична вычислению различий между углами с использованием круговой геометрии, где, например, 0 градусов и 360 градусов (и 720 градусов и т. Д.) Одинаковы. Так в чем же разница между 350 градусами и 10 градусами?

Ответ: это зависит от того, какой путь вы хотите измерить - это может быть 20 градусов или 340 градусов. Но делать вычисления для угловых разностей на самом деле довольно грязно. Вычисления разницы во времени также беспорядочные, если только вы не конвертируете во внутреннюю форму, в которой обычное сложение и вычитание работают обычным образом. Или вы используете современную библиотеку классов, которая волшебным образом скрывает все это от вас (и, следовательно, никогда никому не рассказывает о реальных деталях).

quickly_now
источник
в обоих случаях вы указываете только один путь круглосуточно (или кружок) как «положительный»
HorusKol
Правда. Тем не менее, написание кода для вычисления и правильного выполнения каждый раз требует немного обдумывания.
quick_now