robinbobin ([personal profile] robinbobin) wrote2004-02-20 07:03 am

BUG 2038

Вчера разговаривал с чайником. Рассказал ему почему был баг2000.
потом он спросил, когда следующий?
сказал что в 2038 году.

вот например ЖеЖе имеет такой баг....

запись от февраль 2037 года вводится, 2038 уже нет.

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] gluk-77.livejournal.com 2004-02-20 12:55 am (UTC)(link)
что? что ты посчитал?! 8-o

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] robinbobin.livejournal.com 2004-02-20 01:03 am (UTC)(link)
kolichestvo secund, proshedshix posle vecherinki v chest' pervoj versii unixa ;)

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] gluk-77.livejournal.com 2004-02-20 01:13 am (UTC)(link)
эк тебя.. однако..

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] robinbobin.livejournal.com 2004-02-20 01:58 am (UTC)(link)
ser'ezno....

v unix'e systemnoe vremya xranitsya v signed 32-x bitnom chisle.
t.e. odin bit ispolzuetsya kak znak, eto polozhitelnoe chislo ili otrizatelnoe, v resultate, dlya vremeni ostaetsya na 1 bit menshe, t.e. 31 bit.

samo system time, interpritiruetsya kak chislo secund ot 1 Yanvarya, 1970. (bajka: sozdateli unixa ustroili vecherinku po povodu zarabotavshej versii ;)

vot resultat raboty php scripta
< ?php
$i = 0;
print_r (getdate ($i));
? >
Array
(
[seconds] => 0
[minutes] => 0
[hours] => 2
[mday] => 1
[mon] => 1
[year] => 1970
[weekday] => Thursday
[month] => January
)

t.e. kol-chestvo secund kotorye mogut byt predstavleny v 31butnom chisle 2147483648
eto 68+ let. 2147483648 / (60*60*24*365)

t.e. poslednya resultativnaya data
< ?php
$i = pow (2,31) -1;
print_r (getdate( $i));
? >

Array
(
[seconds] => 7
[minutes] => 14
[hours] => 5
[mday] => 19
[year] => 2038
[weekday] => Tuesday
[month] => January
)

t.e. 19-Yanvarya-2038

esli by, avtory unixa dobavili v opredelenii tipa time ne signed, a unsigned, (t.e. ne uchitivali znak), to problema otlozhilas' by na 136 let.
vse ravno, prostitelno, nikto ne dumal chto eta OS i 68 let prozhivet.
a ved' prozhivet...


Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] beps.livejournal.com 2004-02-25 05:26 am (UTC)(link)
Кроме того , из Юникса тот же подход перекочевал еще в некоторые ОС.

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] robinbobin.livejournal.com 2004-02-26 05:11 am (UTC)(link)
a v kakie, i kakoj date tam sootvetstvuet 0?

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] beps.livejournal.com 2004-02-26 05:30 am (UTC)(link)
Ответил, а потом сам обратил внимание :
After 23:59:59, December 31, 3000, UTC (using _time64 and __time64_t).

Y3K bug , однако :)

Re: запись от февраль 2037 года вводится, 2038 уже нет

[identity profile] robinbobin.livejournal.com 2004-02-26 06:14 am (UTC)(link)
a interesno s kakix soobrazhenij oni postavili ogranichenie na etu datu?

ili oni ne nadeutsya, sho windows do 3001 goda prozhivet :)