Chyby formátování času a úložiště - Time formatting and storage bugs

Ve vědě o počítačích , formátování času a skladování chyby jsou třídou softwarové chyby , které mohou způsobit čas a datum výpočtu nebo zařízení se bude nesprávném zacházení. Toto jsou nejčastěji projevy aritmetického přetečení , ale mohou být také důsledkem jiných problémů. Nejznámějším důsledkem chyb tohoto typu je problém Y2K , ale existuje mnoho dalších milníků nebo dat, která způsobila nebo způsobí problémy v závislosti na různých programovacích nedostatcích.

Rok 1975

Dne 4. ledna 1975 přeteklo 12bitové pole, které bylo použito pro data v operačních systémech Decsystem 10 . Při vývoji alternativního formátu došlo k mnoha problémům a pádům souvisejících s touto chybou.

Rok 1978

Operační systém Digital Equipment Corporation OS/8 pro počítač PDP-8 používal za rok pouze tři bity, což představuje roky 1970 až 1977.

To bylo rozpoznáno při vývoji pozdějšího operačního systému COS-310 a data byla zaznamenávána odlišně.

Rok 1989

Některé mainframe programy byly napsány tak, aby kódovaly data jako počet dní od 'nulového data' od 1. ledna 1900 a ukládaly je jako podepsaná 16bitová binární celá čísla. Dne 18. září 1989 začaly tyto programy selhávat, přičemž datum bylo přesně 32 768 (2 15 ) dní od nulového data. Hodnoty v tento den a po něm se nevejdou do podepsaného 16bitového celého čísla, ale přetečou a vrátí záporné hodnoty.

Rok 1997

Domain / OS hodiny, která je založena na počtu 4 mikrosekundy jednotek, které došlo v době od 1. ledna 1980, válcované kolem 47 bitů dne 2. listopadu 1997, čímž neopravených systémů nepoužitelný.

Rok 1999

V posledních několika měsících před rokem 2000 došlo k dalším dvěma milníkům souvisejícím s datem, které získaly menší publicitu než tehdy hrozící problém Y2K.

První převrácení GPS

Data GPS jsou vyjádřena jako číslo týdne a číslo dne v týdnu, přičemž číslo týdne je přenášeno jako desetibitová hodnota. To znamená, že každých 1024 týdnů (asi 19,6 let) po neděli 6. ledna 1980 ( epocha GPS ) se datum znovu resetuje na toto datum; to se stalo poprvé v 23:59:47 v sobotu 21. srpna 1999, podruhé v 23:59:42 UTC dne 6. dubna 2019 a stane se to znovu 20. listopadu 2038. Aby se tento problém vyřešil, modernizovala se GPS navigace zprávy používají 13bitové pole, které se opakuje pouze každých 8192 týdnů (157 let) a vrátí se na nulu až blízko roku 2137.

9/9/99

V mnoha programech nebo sadách dat bylo „9/99/99“ použito jako nepoctivá hodnota k označení buď nevyřešeného data, nebo jako terminátor k označení, že v sadě nebyla žádná další data. To vyvolalo problémy s příchodem skutečného data, které představuje 9. září 1999.

Rok 2000

Dvouciferné roční vyjádření

Následné problémy způsobené určitými dočasnými opravami problému Y2K se objeví v různých bodech 21. století. Některé programy byly vytvořeny v souladu s Y2K tím, že nadále používají dvouciferné roky, ale vybírají si libovolný rok, před kterým jsou tyto roky interpretovány jako 20 xx , a poté jsou interpretovány jako 19 xx .

Například program mohl být změněn tak, že zachází s dvoucifernými ročními hodnotami 00–68 jako s odkazem na 2000 až 2068 a s hodnotami 69–99 jako s odkazem na roky 1969 až 1999. Takový program nebude schopen správně zpracovat s roky po roce 2068.

U aplikací požadovaných pro výpočet roku narození (nebo jiného minulého roku) byl takový algoritmus dlouho používán k překonání problému roku 1900 , ale nedokázal rozpoznat lidi starší 100 let .

Rok 2010

Některé systémy měly problémy po přechodu roku na rok 2010. Někteří to v médiích nazývali jako problém „Y2K+10“ nebo „Y2.01k“.

Hlavním zdrojem problémů byla záměna mezi hexadecimálním kódováním čísel a BCD kódováním čísel. Čísla 0 až 9 jsou v hexadecimálním i BCD kódována jako 00 16 až 09 16 . Desetinné číslo 10 je však kódováno hexadecimálně jako 0A 16 a v BCD jako 10 16 . BCD 10 16 interpretovaný jako hexadecimální kódování tedy chybně představuje desítkové číslo 16.

Protokol SMS například používá pro data kódování BCD, takže některý software mobilního telefonu nesprávně hlásil data zpráv jako rok 2016 místo roku 2010. Windows Mobile byl první software, který byl údajně touto chybou ovlivněn; v některých případech WM6 změnil datum jakékoli příchozí SMS zprávy odeslané po 1. lednu 2010 z roku 2010 na 2016.

Mezi další ovlivněné systémy patří terminály EFTPOS a PlayStation 3 (kromě modelu Slim).

K nejvýznamnější takové závadě došlo v Německu, kde se více než 20 milionů bankovních karet stalo nepoužitelným, a v Citibank Belgium, jejíž identifikační čipy zákazníků digipass přestaly fungovat.

Rok 2011

Tchaj-wan oficiálně používá kalendář Minguo , který za svůj rok považuje gregoriánský rok 1912. Gregoriánský rok 2011 je tedy rok 100 ROC, jeho první 3místný rok.

Rok 2013

Bezpilotní vesmírná sonda Deep Impact ztratila komunikaci se Zemí dne 11. srpna 2013 poté, co hodiny od 1. ledna 2000 napočítaly 2 32 decisekund (desetiny sekund).

Rok 2015

Starší mobilní telefony Samsung s čipovými sadami Agere , jako například Samsung SGH-C170, nemohly změnit data po 31. prosinci 2014.

Rok 2019

Druhé převrácení GPS

Data GPS jsou vyjádřena jako číslo týdne a číslo dne v týdnu, přičemž číslo týdne je přenášeno jako desetibitová hodnota. To znamená, že každých 1024 týdnů (asi 19,6 let) po neděli 6. ledna 1980 ( epocha GPS ) se datum znovu resetuje na toto datum; to se stalo poprvé v 23:59:47 v sobotu 21. srpna 1999, podruhé v 23:59:42 UTC dne 6. dubna 2019 a stane se to znovu 20. listopadu 2038. Aby se tento problém vyřešil, modernizovala se GPS navigace zprávy používají 13bitové pole, které se opakuje pouze každých 8192 týdnů (157 let) a vrátí se na nulu až blízko roku 2137.

Přechod japonského kalendáře

Dne 30. dubna 2019 japonský císař Akihito abdikoval ve prospěch svého syna Naruhita . Jak roky v Japonsku jsou tradičně označovány jmény éry, které odpovídají vládě každého císaře, toto vyústilo v nové jméno éry, Reiwa (和), po Naruhitově nástupu na trůn následující den. Protože předchozí císař Hirohito zemřel 7. ledna 1989 a Akihitova vláda většinou odpovídala vzestupu používání počítačů, většina softwaru nebyla testována, aby bylo zajištěno správné chování při změně éry, zatímco testování bylo dále komplikováno skutečností, že název nové éry byl odhalen až 1. dubna 2019.

Proto se od softwaru, který nepředvídal novou éru, očekávaly chyby.

Rok 2020

WWE 2K20 a Star Wars Jedi: Fallen Order by havarovaly 1. ledna 2020, kdy se rok převalil. Závady bylo možné obejít pouze resetováním roku zpět na rok 2019, dokud nebude vydána oprava. Od roku 2020navíc Crystal Reports 8.5 nebude generovat konkrétní zprávy.

Parkovací automaty v New Yorku a na dalších místech nebyly schopny přijímat kreditní karty jako způsob platby počínaje rokem 2020. Bylo zavedeno řešení, ale vyžadovalo, aby každý měřič byl individuálně aktualizován. V New Yorku se neočekávalo, že by měřiče byly opraveny do 9. ledna.

V Polsku 5 000 pokladen přestalo správně vytisknout datum.

Sportovní chytré hodinky SUUNTO ukázaly chybu při výpočtu dnů v týdnu, která byla prezentována s krokem +2 (aka: FRI spíše WED, SAT spíše než THU). U hodinek SUUNTO Spartan byla chyba opravena s vydáním firmwaru 2.8.32.

Klasický Mac OS

Ovládací panel v klasických verzích Mac OS 6, 7 a 8 umožňuje nastavit datum až na 31. prosince 2019, i když je systém schopen pokračovat v přesouvání času i po tomto datu.

Rok 2021

Uživatelé Samsungu uvedli, že telefony běžící na nejnovější aktualizaci One UI 3.0 nebo Androidu 11 od roku 2021 ztratily přístup ke statistikám baterie a nabíjení. Dotčená zařízení nebudou vykazovat statistiky využití, takže tyto sekce zůstanou prázdné. Starší modely Sony Bravia nyní při pokusu o nastavení připomenutí EPG hlásí neplatná data.

Rok 2025

V Japonsku některé starší počítačové systémy využívající japonský kalendář, které nebyly aktualizovány, stále počítají roky podle éry Shōwa . Rok 2025 odpovídá v těchto systémech Shōwa 100, což může způsobit problémy, pokud software předpokládá dvě číslice pro daný rok.

Rok 2028

Na konci sedmdesátých let vytvořila společnost World Computer Corporation (provádějící aplikace družstevních záložen) v systémech Data General Nova a Eclipse formát data se 16bitovým datovým polem na 128 let (7 bitů - poznámka 1900+128 = 2028), 12 měsíce (4 bity) a 31 dní (5 bitů).

To umožnilo data přímo porovnávat pomocí nepodepsaných funkcí. Dnes nejsou používány žádné známé instance tohoto formátu.

Rok 2031

Některé systémy, jako jsou MediaTek ‚s Nucleus OS , jen jít až do 31. prosince 2030.

Rok 2032

Palm OS používá jak celá čísla se znaménkem s epochou 1970 , tak i celá čísla bez znaménka s epochou 1904, pro různé systémové funkce, například pro systémové hodiny a data souborů (viz formát PDB ). I když by to mělo mít za následek, že Palm OS bude náchylný k problému 2038 , Palm OS také používá 7bitové pole pro ukládání hodnoty roku, přičemž jiná epocha se počítá od roku 1904, což má za následek maximální rok 2031 (1904+127).

Rok 2036

Protokol Network Time Protocol má problém s přetečením související s problémem roku 2038 , který se projevuje v 06:28:16 UTC dne 7. února 2036, nikoli 2038. 64bitová časová razítka používaná NTP se skládají z 32bitové části pro sekund a 32bitovou část na zlomek sekundy, což dává NTP časové měřítko, které se převrací každých 2 32 sekund (136 let) a teoretické rozlišení 2–32 sekundy (233 pikosekund). NTP používá epochu 1. ledna 1900. K prvnímu převrácení dochází v roce 2036, před problémem UNIX roku 2038.

Rok 2038

Převrácení času Unix

Původní implementace operačního systému Unix ukládala systémový čas jako 32bitové celé číslo se znaménkem představující počet sekund za unixovou epochou : půlnoc UTC, 1. ledna 1970. Tato hodnota se převede 19. ledna 2038. Tento problém byl vyřešen ve většině moderních unixových a unixových operačních systémů ukládáním systémového času jako 64bitové celé číslo se znaménkem, i když jednotlivé aplikace, protokoly a formáty souborů bude stále nutné také změnit.

Převrácení DVB

Systém Digital Video Broadcast má problém 22. dubna 2038, kdy se 16 bitů použitých pro přenos Modified Julian Days použitých pro plánování elektronického průvodce restartuje od nuly. Specifikace ETSI EN 300 368 uvádí v příloze C, že poskytnuté vzorce MJD jsou platné do 28. února 2100, ale nezmiňuje limity stanovené 16 bity použitými k přenosu výsledné hodnoty.

Třetí převrácení GPS

Data GPS jsou vyjádřena jako číslo týdne a číslo dne v týdnu, přičemž číslo týdne je přenášeno jako desetibitová hodnota. To znamená, že každých 1024 týdnů (asi 19,6 let) po neděli 6. ledna 1980 ( epocha GPS ) se datum znovu resetuje na toto datum; to se stalo poprvé v 23:59:47 v sobotu 21. srpna 1999, podruhé v 23:59:42 UTC dne 6. dubna 2019 a stane se to znovu 20. listopadu 2038. Aby se tento problém vyřešil, modernizovala se GPS navigace zprávy používají 13bitové pole, které se opakuje pouze každých 8192 týdnů (157 let) a vrátí se na nulu až blízko roku 2137.

Rok 2040

Počáteční počítače Apple Macintosh ukládají čas ve svých hodinách reálného času (RTC) a souborových systémech HFS jako nepodepsaný 32bitový počet sekund od 00:00:00 dne 1. ledna 1904. Po 06:28:15 dne 6. února 2040 (tj. 2 32 -1 sekund od epochy), bude to trvat kolem roku 1904: dále je ovlivněn také HFS+ , výchozí formát pro všechny nejnovější počítače Apple Macintosh. Náhradní systém souborů Apple tento problém řeší.

ProDOS pro počítače Apple II podporuje pouze dvouciferná čísla let. Aby se předešlo problémům s Y2K, vydal Apple technickou poznámku, ve které uvádí, že číslo roku mělo představovat 1940–2039. Software pro platformu může nesprávně zobrazovat data počínaje rokem 2040, ačkoli se vyvíjí úsilí třetích stran o aktualizaci ProDOS a aplikačního softwaru tak, aby podporoval roky až 4095.

Rok 2042

Dne 18. září 2042, v době denního času (TODC) na S / 370 mainframe IBM bude i jeho právním nástupcům, včetně aktuálních zSeries, převrátit.

Starší TODC byly implementovány jako 64bitový počet 2 až 12 mikrosekundových (0,244 ns) jednotek a standardní základna byla 1. ledna 1900 UT . V červenci 1999 byly oznámeny rozšířené hodiny TODC, které rozšířily hodiny doprava (to znamená, že rozšířené bity jsou méně významné než původní bity). Skutečné rozlišení závisí na modelu, ale formát je konzistentní, a proto se převrátí po 2 52 mikrosekundách.

Hodnota TODC je přístupná programům v uživatelském režimu a často se používá pro načasování a generování jedinečných ID pro události.

Zatímco IBM na posledních počítačích definovala a implementovala delší (128bitový) hardwarový formát, který prodlužuje časovač na obou koncích nejméně o 8 dalších bitů, mnoho programů nadále spoléhá na 64bitový formát, který zůstává přístupnou podmnožinou delšího časovače.

Rok 2048

Systém ATSC bude mít problém podobný problému DVB popsanému výše po roce 2048, protože používá podepsané 32bitové sekundy GPS, které začínají od 6. ledna 1980.

Logika plánování kapacity v systému ERP SAP S/4HANA podporuje pouze data dokončení do 19. ledna 2048 (24855 dní od 1. ledna 1980). To se týká např. Plánování výroby, údržby a inspekcí.

Rok 2051

Wii a Nintendo 3DS se převrátit na konci dne 31. prosince 2050, návratu k 1. lednu 2000. Některé hry na těchto konzol, které mají své vlastní kalendář systému, bude vrátit zpět do jiného rok stanovena ve hře; jako je Animal Crossing: New Leaf , který se vrátí k 1. lednu 2012.

Rok 2061

Přepínač Nintendo neumožňuje uživatelům zadat jakékoli datum po roce 2060-12-31. Systém je však stále schopen posunout čas po tomto datu.

Rok 2079

Dny 32 768 a 65 536

Programy, které ukládají data jako počet dní od libovolného data (nebo epochy ), jsou náchylné k efektům převrácení nebo obtékání, pokud hodnoty nejsou dostatečně široké, aby umožnily hodnotám data pokrýt dostatečně velký časový rozsah očekávaný pro aplikace. Podepsané 16bitové binární hodnoty se převádějí po 32 768 (2 15 ) dnech od data epochy a vytvářejí záporné hodnoty. Některé systémy sálových počítačů se setkaly se selháním softwaru, protože měly zakódovaná data jako počet dní od 1. ledna 1900, což vedlo k neočekávaným záporným číslům k datu převrácení 18. září 1989. Podobně se počítá přetečení 16bitových binárních dnů bez podpisu po 65 536 (2 16 ) dnů, které jsou zkráceny na nulové hodnoty. U softwaru používajícího epochu 1. ledna 1900 k tomu dojde 6. června 2079.

Rok 2080

Některé (ne-li všechny) telefony Nokia, které používají řadu 40 (například Nokia X2-00 ), podporují pouze data do roku 2079-12-31, a proto již nebudou moci zobrazovat data. Jedním řešením je použít rok 1996, 2024 nebo 2052 namísto roku 2080 (jako kompatibilní přestupné roky) k zobrazení správného dne v týdnu, data a měsíce na hlavní obrazovce.

Systémy uchovávající rok jako dvoucifernou hodnotu 00..99 pouze interně, stejně jako mnoho RTC, se mohou převrátit od 2079-12-31 do epochy IBM PC a DOS 1980-01-01 .

Rok 2100

Rozhraní API a konverzní funkce DOS a Windows pro data (například INT 21h /AH = 2Ah) oficiálně podporují pouze data do 2099-12-31 (i když základní souborový systém FAT by teoreticky podporoval data do 2107). Operační systémy založené na systému DOS a aplikace, které převádějí jiné formáty na formát FAT/DOS, proto mohou od 2100-01-01 vykazovat neočekávané chování.

Další problém se objeví na konci 2100-02-28, protože 2100 není přestupný rok . Protože mnoho běžných implementací algoritmu přestupného roku je neúplných nebo je zjednodušeno, budou chybně předpokládat, že 2100 bude přestupným rokem, což způsobí, že se datum převede z 2100-02-28 na 2100-02-29 namísto 2100-03- 01.

Nintendo DS a GameCube, stejně jako Sony PlayStation 4, umožňují uživatelům pouze nastavit data do roku 2099. V případě Nintendo DS systém nepostoupí čas po letech 2099-12-31, kde jako GameCube a PS4 se bude stále převádět do roku 2100 a dále, a to i přesto, že uživatelé těchto herních konzolí nemohou ručně zadat datum a čas tak daleko.

Rok 2106

Mnoho existujících formátů souborů, komunikačních protokolů a aplikačních rozhraní využívá variantu formátu data Unix time_t , která uchovává počet sekund od období Unixu (půlnoc UTC, 1. ledna 1970) jako 32bitové binární celé číslo bez znaménka . Tato hodnota bude převrácena 7. února 2106 v 06:28:15. To znamená, že v tuto chvíli je počet sekund od 1. ledna 1970 FFFF FFFF v hex.

(Tento problém reprezentace úložiště je nezávislý na programech, které interně ukládají a fungují v systémových časech jako 64bitové celočíselné hodnoty se znaménkem.)

Rok 2108

Časová razítka uložená v souborových systémech FAT , původně zavedených s 86-DOS 0,42 dne 25. února 1981 a přenesených do MS-DOS , PC DOS , DR-DOS atd., Přetečou na konci 2107-12-31. Poslední modifikace datum razítko (a DELWATCH 2.0+ také soubor datum vypuštění razítko , a vzhledem k tomu DOS 7.0 + volitelně také poslední datum přístupu razítko a vytvoření datové razítko ), jsou uloženy v položce adresáře s rokem reprezentován jako nepodepsaný sedm bitové číslo (0–127), ve srovnání s rokem 1980, a proto není možné uvést žádná data v roce 2108 a dále. Funkce API definované pro načtení těchto dat oficiálně podporují pouze data do 2099-12-31.

To také ovlivní formát archivního souboru ZIP , protože interně používá časová razítka pro úpravu souborů FAT.

Rok 2137

Data GPS jsou vyjádřena jako číslo týdne a číslo dne v týdnu, přičemž číslo týdne zpočátku používá desetibitovou hodnotu a modernizované navigační zprávy GPS pomocí 13bitového pole. Desetbitové systémy by se převáděly každých 1024 týdnů (asi 19,6 let) po neděli 6. ledna 1980 ( epocha GPS ) a 13bitové systémy se převáděly každých 8192 týdnů. Třináctibitové systémy se v roce 2137 převrátí na nulu.

Rok 2262

Některé systémy měření času počítají nanosekundy od roku 1970 pomocí 64bitového celého čísla se znaménkem, které přeteče 11. dubna 2262 23:47:16. V programovacím jazyku jdou UnixNano API je jedním z příkladů. Mezi další příklady patří objekt Timestamp v Pythonu pandy , C ++ chrono :: system_clock a časovače QEMU .

Roky 4000 a 8000

Zatímco většina softwaru (včetně Excelu , JavaScriptu a R ) správně rozpoznává 4000 a 8000 jako přestupné roky (protože jsou dělitelné 400), SAS ne kvůli neoficiálnímu „pravidlu 4000 let“.

Po 28. únoru 4000 se tedy datové převody mezi SAS a jiným softwarem synchronizují, pokud software SAS tuto nesrovnalost neúčtuje.

Rok 4501

Microsoft Outlook používá datum 1. ledna 4501 jako zástupný symbol pro „žádný“ nebo „prázdný“.

Rok 10 000

Rok 10 000 bude prvním gregoriánským rokem s pěti číslicemi. Ačkoli mnoho lidí zpočátku považuje letošní rok za tak vzdálený, že problém tohoto typu ve skutečnosti nikdy nenastane, určité třídy výpočtů v oborech, jako je astronomie a fyzika, již musí pracovat s roky této velikosti a větší. Tyto aplikace se také musí vypořádat s problémem Rok nula . Všechny budoucí roky, které mají mocniny 10, mají potenciál pro podobné problémy.

„RFC 2550 - Y10K and Beyond“ pojednává o řešeních pro řešení tohoto problému.

Rok 30,828

Počínaje 14. zářím 30,828 systém Windows nepřijme data po tomto dni a při spuštění zobrazí systém Windows chybu týkající se „neplatného systémového času“. Důvodem je to, že hodnota FILETIME ve Windows, což je 64bitová hodnota odpovídající počtu 100 nanosekundových intervalů od 1. ledna 1601, 00: 00: 00.0000000 UTC, v ten den v 02:48 přeteče svou maximální možnou hodnotu : 05.4775808 UTC. Důvodem je přetečení celých čísel .

Let 32 ​​768 a 65 536

Programy, které zpracovávají roky jako 16bitové hodnoty, se mohou setkat s problémy, které se týkají buď roku 32 768, nebo 65 536, v závislosti na tom, zda je hodnota považována za celé číslo se znaménkem nebo bez znaménka.

Pro problém roku 32 768 lze roky po 32 767 interpretovat jako záporná čísla, počínaje −32 768. Problém roku 65 536 se pravděpodobněji projeví tím, že bude rok 65 536 reprezentovat jako rok 0.

Rok 292 277 026 596 problém

Určité problematické roky se v budoucnosti objevují tak daleko (daleko za pravděpodobnou délkou života Země , Slunce , lidstva a dokonce i za některými předpověďmi životnosti vesmíru ), že jsou označovány hlavně jako záležitosti teoretického zájmu, vtipy nebo náznaky, že související problém není skutečně vyřešen pro jakoukoli rozumnou definici „vyřešeno“.

Problém 292 277 026 596 let (přibližně2,9 × 10 11 let v budoucnosti) nastane, když 64bitový unixový čas přeteče v UTC 15:30:08 v neděli 4. prosince 292 277 026 596 n. L.

Přetečení relativního času

Microsoft

V systémech Microsoft Windows 7, Windows Server 2003, Windows Server 2008 a Windows Vista byly informace o zahájení připojení TCP uloženy ve setinách sekundy pomocí 32bitového celého čísla bez znaménka, což způsobilo přetečení a selhání připojení TCP po 497 dnech.

Microsoft Windows 95 a Windows 98 měly problém s převrácením 2^32 milisekund v ovladači virtuálního zařízení (VTDAPI.VXD), což způsobilo zablokování systémů po 49,7 dnech.

Boeing

787 Boeing letadlo má alespoň dva softwarové problémy související s dobou skladování. V roce 2015 byla nahlášena chyba, kdy byl čas uložen ve setinách sekundy pomocí podepsaného 32bitového celého čísla a systémy by se zhroutily po 248 dnech. V roce 2020 vydala FAA směrnici o letové způsobilosti pro problém, kdy pokud nebude letadlo úplně vypnuto před dosažením 51 dnů provozuschopnosti, systémy začnou zobrazovat zavádějící data.

Viz také

Reference

Poznámky