Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Почему TDateTime считается с 30.12.1899 12:00  [new]
barabas
Member

Откуда:
Сообщений: 144
Всем привет!

Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

TDateTime type

TDateTime represents a date-and-time value in the Delphi language.

Unit

System

Delphi syntax:

type TDateTime = type Double;

Description

Most CLX objects represent date and time values using a TDateTime value. In Delphi, TDateTime is a type that maps to a Double. In C++, the TDateTime class corresponds to the Delphi TDateTime type. 

The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed. 

Following are some examples of TDateTime values and their corresponding dates and times:

0	12/30/1899 12:00 am
2.75	1/1/1900 6:00 pm
-1.25	12/29/1899 6:00 am
35065	1/1/1996 12:00 am
To find the fractional number of days between two dates, simply subtract the two values, unless one of the TDateTime values is negative. Similarly, to increment a date and time value by a certain fractional number of days, add the fractional number to the date and time value if the TDateTime value is positive. 
When working with negative TDateTime values, computations must handle time portion separately. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value. For example, 6:00 am on 12/29/1899 is1.25, not1 + 0.25, which would be –0.75. There are no TDateTime values between –1 and 0.

Note:	Delphi 1.0 calculated the date from year 1 instead of from 1899. To convert a Delphi 1.0 date to a TDateTime value in later versions of the Delphi language, subtract 693594.0 from the Delphi 1.0 date.
12 фев 09, 12:00    [6810821]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Korcar
Member

Откуда:
Сообщений: 7953
думаю, это вопрос к разработчикам. а проблема то в чем? это тебя напрягает? :)
12 фев 09, 12:07    [6810889]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30116
автор
Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

якобы началось это с Микрософта, остальные сделали для совместимости.
Вот что я нарыл:
Essentially, zero was supposed to represent the start of the new century.
However, when Microsoft brought out Excel, it needed to be compatible with Lotus 1-2-3. Now, 1-2-3 had a bug regarding the year 1900: it thought that 1900 was a leap year, when in fact it wasn't. To maintain compatibility, the Excel team decided to retain the bug in Excel.
In order not to screw up the dates for the rest of the century, though, they had to shift the zero point back one day. And there you have it.

Вообще, 0 предполагалось в качестве даты-времени старта нового века.
Однако, когда Микрософт приобрел Эксел, нужно было обеспечить совместимость с Лотус 1-2-3. А в Лотус 1-2-3 был баг в отношении 1900 года - оно думало что это високосный год, в то время как 1900 - не високосный. Для обеспечения совместимости команда Экселя решила ввести этот баг в Эксель.
Таким образом, чтобы дата не уехала, 0 на самом деле представляет собой 01.01.1900 минус 1 день. Вот так.
12 фев 09, 12:08    [6810892]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
barabas
Всем привет!

Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

Вообще в 1С выбрана именно 01.01.1900 00:00:00.
12 фев 09, 12:12    [6810929]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
gds
Вообще в 1С выбрана именно 01.01.1900 00:00:00.


Ну, от этих добра не жди! Так и знал, что ЭТО ВСЁ ОНИ!!!
12 фев 09, 12:16    [6810950]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
barabas
Member

Откуда:
Сообщений: 144
kdv
автор
Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

якобы началось это с Микрософта, остальные сделали для совместимости.
Вот что я нарыл:...


Спасибо за ответ. Только вот сдвиг произошел не на 1 день, а на 1,5, это остается непонятным. Вопрос чисто из праздного любопытства.
12 фев 09, 12:50    [6811257]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Dim2000
Member

Откуда: Москва
Сообщений: 5320

barabas пишет:

> Только вот сдвиг произошел не на 1 день, а на 1,5

В твоём воображении ;). Реально на 1.

Posted via ActualForum NNTP Server 1.4

12 фев 09, 12:56    [6811290]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
gds
barabas
Всем привет!

Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

Вообще в 1С выбрана именно 01.01.1900 00:00:00.

1С ничего не выбирала!
12 фев 09, 13:18    [6811489]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
barabas
Member

Откуда:
Сообщений: 144
Dim2000

barabas пишет:

> Только вот сдвиг произошел не на 1 день, а на 1,5

В твоём воображении ;). Реально на 1.


да, точно, я как-то не обратил внимание на AM/PM
12 фев 09, 13:19    [6811504]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
barabas
Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

А ты обосную 1900 чем она лучше чем 1899?
Борланд например обосновал именно 1899
12 фев 09, 13:19    [6811507]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
barabas
Member

Откуда:
Сообщений: 144
Anatoly Podgoretsky
barabas
Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???

А ты обосную 1900 чем она лучше чем 1899?
Борланд например обосновал именно 1899

Борланд не обосновал, а утвердил 1899. С таким же успехом можно было абстрагироваться от "ровных" дат и выбрать, скажем 09.11.1878 07:23:19 в честь дня рождения дедушки Билла Гейтса :)
12 фев 09, 15:45    [6812749]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Обосновал, он не с головы брал опору.

--
http://www.podgoretsky.com
12 фев 09, 16:16    [6813001]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Splash
Member

Откуда:
Сообщений: 10
Сегодня (08.07.09) праздник! Ровно 40000 дней прошло с 01.01.1900!

PS: Средняя продолжительность жизни мужчин у нас - 22000 дней.
8 июл 09, 13:28    [7391295]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5923
Точка отсчета временных штампов в ядре NT - 1 анваря 1601 года! Дата выбрана для упрощения преобразующих алгоритмов. Годы делящиеся на 4 являются високосными. Однако годы начала века не являются високосными (1900 год например) - это исключение из общего правила. Но и это не все: каждый четвертый год начала века (1600 год, 2000 год) являются исключением из исключения и считаются високосными. Вот так вот...
8 июл 09, 13:42    [7391407]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
S.G.
Member

Откуда: cartoon network
Сообщений: 30611
Barmaley57
исключение из общего правила.
почему исключения... в григорианском календаре исключения просто вошли в правило! :)
автор
год является високосным, если он кратен 4 и при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо кратен 4, но при этом кратен 100 и не кратен 400.

Годы смены столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 1700, 1800 и 1900 не были високосными, так как они кратны 100 и не кратны 400. Год 2000 — високосный, так как он кратен 400.
8 июл 09, 15:41    [7392271]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
NextMan
Member

Откуда:
Сообщений: 9744
barabas
Всем привет!

Кто может внятно объяснить, почему за отправную точку выбрана именно эта дата, а не скажем 01.01.1900 00:00 ???
...

Потому что в этот день, в 12:00, на главной площади г. Боденвердера (Гернмания, земле Нижняя Саксония) выстрелила пушка, извещающая выпуск первой версии Delphi.
Салютом руководил ведущий разработчик лично, местный барон, Иероним Карл Фридрих.
8 июл 09, 17:02    [7392769]     Ответить | Цитировать Сообщить модератору
 Re: Почему TDateTime считается с 30.12.1899 12:00  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
В первой версии Дельфи отправной точкой было 1.01.0001 00:00:00

--
http://www.podgoretsky.com
8 июл 09, 17:07    [7392801]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить