Komputery Okna Internet

Konwerter Uniksa. Aktualny czas epoki Uniksa. Jak uzyskać czas uniksowy w

  • UTC: Czas na południku zerowym nazywa się Uniwersalnym Czasem Skoordynowanym. Niedopasowanie akronimu spowodowane było potrzebą jego uniwersalności dla wszystkich języków.
  • GMT: Wcześniej używano czasu Greenwich Mean Time (GMT) zamiast UTC, ponieważ południk zerowy został wybrany do przejścia przez Królewskie Obserwatorium w Greenwich.
  • Inne strefy czasowe można zapisać jako przesunięcie względem czasu UTC. Na przykład australijski czas wschodni (EST) jest zapisany jako UTC + 1000, co oznacza, że ​​10:00 UTC to 20:00 EST tego samego dnia.
  • Czas letni nie wpływa na UTC. To tylko decyzja polityczna o zmianie strefy czasowej (przesunięcie względem UTC). Na przykład nadal obowiązuje GMT: zimą jest to czas narodowy brytyjski. Latem staje się BST.
  • Sekundy przestępne: Zgodnie z konwencją międzynarodową, czas UTC jest utrzymywany nie więcej niż 0,9 sekundy od rzeczywistości fizycznej (UT1, która jest mierzona w czasie słonecznym) poprzez wprowadzenie „sekundy przestępnej” pod koniec ostatniej minuty roku w UTC lub ostatniej minuty Czerwiec.
  • Sekundy przestępne nie muszą być ogłaszane (przez astronomów) ponad 6 miesięcy przed ich wprowadzeniem. Jest to problem, jeśli potrzebujesz planowania drugiej precyzji przez ponad 6 miesięcy.
  • Czas uniksowy: Mierzony liczbą sekund od „epoki” (początek 1970 UTC). Na czas uniksowy nie mają wpływu strefy czasowe ani czas letni.
  • Zgodnie ze standardem POSIX.1 czas uniksowy powinien obsługiwać sekundy przestępne poprzez powtórzenie poprzedniej sekundy, na przykład: 59,00 59,25 59,50 59,75 59,00 ← powtórz 59,25 59,50 59,75 00.00 ← przyrost 00.25 Jest to kompromis: nie można wyrazić żadnej sekundy przestępnej w twoim zegarze systemowym, a twój czas na pewno się cofnie. Z drugiej strony, każdy dzień trwa dokładnie 86 400 sekund i nie potrzebujesz tabeli wszystkich przeszłych i przyszłych sekund przestępnych, aby przekonwertować czas uniksowy na czytelne dla człowieka godziny-minuty-sekundy.
  • Przypuszcza się, że ntpd spróbuje ponowić próbę po otrzymaniu bitów przestępnych z serwerów czasu nadrzędnego, ale widziałem też, że nic nie robi: system idzie o sekundę w przyszłość, a potem powoli wraca do właściwego czasu.

Co każdy programista powinien wiedzieć o czasie

  • Strefy czasowe odnoszą się do poziomu prezentacji
    Większość twojego kodu nie powinna zajmować się strefami czasowymi ani czasem lokalnym, powinien mijać czas uniksowy takim, jakim jest.
  • Mierząc czas, zmierz czas uniksowy. To jest UTC. Łatwo go zdobyć (poprzez funkcje systemowe). Nie ma stref czasowych ani czasu letniego (i sekund przestępnych).
  • Kiedy przechowujesz czas, przechowuj czas uniksowy. To jeden numer.
  • Jeśli chcesz zachować czas czytelny dla człowieka (na przykład w dziennikach), spróbuj go zachować razem z czasem uniksowym, nie zamiast.
  • Podczas wyświetlania czasu zawsze uwzględniaj przesunięcie strefy czasowej. Format czasu bez przesunięcia jest bezużyteczny.
  • Zegar systemowy nie jest dokładny.
  • Jesteś online? Zegar systemowy każdego innego komputera nie jest dokładny w inny sposób.
  • Zegar systemowy może i będzie skakał w czasie z powodu rzeczy, na które nie masz wpływu. Twój program musi być tak zaprojektowany, aby to przetrwać.
  • Stosunek liczby sekund zegar systemowy do ilości prawdziwy sekundy nie są dokładne i mogą się różnić. Zależy to głównie od temperatury.
  • Nie używaj na ślepo gettimeofday (). Jeśli chcesz mieć monotonny (ciągle rosnący) zegar, spójrz na clock_gettime (). [Opcja Java: użyj System.nanoTime () zamiast System.currentTimeMillis ()]
  • Ntpd może zmienić czas systemowy na dwa sposoby:
    • Krok: zegarek natychmiast przeskakuje do przodu lub do tyłu do właściwego czasu
    • Korba: Zmień częstotliwość zegara systemowego tak, aby powoli przesuwał się w kierunku prawidłowego czasu.
    Skręcanie jest preferowane, ponieważ jest mniej szkodliwe, ale przydatne tylko do korygowania niewielkich różnic.

Przypadki specjalne

  • Dla wszystkich obserwatorów czas mija w tempie jedna sekunda na sekundę. Częstotliwość odległych zegarów w stosunku do obserwatora zależy od prędkości i grawitacji. Zegary wewnątrz satelitów GPS są dostosowane do przezwyciężania skutków względności.
  • MySQL przechowuje kolumny DATETIME jako wartości upakowane liczbami „RRRRMMDD HHMMSS” Jeśli obawiasz się przechowywania znaczników czasu, przechowuj je jako liczby całkowite i użyj funkcji UNIX_TIMESTAMP() i FROM_UNIXTIME() do konwersji.

Ponieważ nie ma wbudowanych narzędzi w oleju napędowym, tworzymy następujący skrypt: #! / bin / sh truss date 2> & 1 | grep ^ time | awk "(print $ 3;)" exit $? lub nawk "BEGIN (print srand ())" lub na perl: perl -e "print time," \ n ";" sprawdź datę modyfikacji pliku: truss -v lstat -t lstat ls -l plik.txt 2> & 1 1> / dev / null | grep "mt \ = \" | awk "(drukuj 9 USD;)"

Jak uzyskać czas uniksowy w ...

Perl czas
PHP czas ()
Rubin Czas.teraz (lub Czas.nowy). Do wyjścia: Time.now.to_i
Pyton najpierw importuj czas, potem time.time ()
Jawa długa epoka = System.currentTimeMillis () / 1000;
Microsoft .NET C # epoka = (DateTime.Now.ToUniversalTime (). Ticks - 621355968000000000) / 10000000;
VBScript / ASP DateDiff ("s", "01/01/1970 00:00:00", teraz ())
Erlang kalendarz: datetime_to_gregorian_seconds (kalendarz: now_to_universal_time (teraz ())) - 719528 * 24 * 3600.
MySQL SELECT unix_timestamp (teraz ())
PostgreSQL SELECT ekstrakt (epoka FROM teraz ());
Serwer SQL WYBIERZ DATEDIFF (s, "1970-01-01 00:00:00", GETUTCDATE ())
JavaScript Math.round (nowy Date (). GetTime () / 1000.0) getTime () zwraca czas w milisekundach.
Unix / Linux data +% s
Inne systemy operacyjne Wiersz poleceń: perl -e "print time" (jeśli Perl jest zainstalowany w twoim systemie)

Konwertowanie daty na czas uniksowy na...
PHP mktime ( zegarek, minuty, sekundy, miesiąc, dzień, rok)
Rubin Czas.lokalny ( rok, miesiąc, dzień, zegarek, minuty, sekundy, usec) (lub Time.gm dla wyjścia GMT / UTC). Aby wyświetlić dodaj .to_i
Pyton najpierw zaimportuj czas, potem int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Jawa długa epoka = nowa java.text.SimpleDateFormat ("dd / MM / rrrr GG: mm: ss"). parse ("01/01/1970 01:00:00");
VBScript / ASP DateDiff ("s", "01/01/1970 00:00:00", pole daty)
MySQL SELECT unix_timestamp ( czas) Format czasu: RRRR-MM-DD GG: MM: SS lub RRMMDD lub RRRRMMDD
PostgreSQL SELECT ekstrakt (data epoki FROM ("2000-01-01 12:34"));
Z sygnaturą czasową: WYBIERZ WYCIĄG (EPOCH OD ZNACZNIKA CZASOWEGO Z STREFĄ CZASOWĄ „2001-02-16 20: 38: 40-08”); Z interwałem: WYBIERZ WYCIĄG (EPOCHA Z PRZEDZIAŁU „5 dni 3 godziny”);
Serwer SQL WYBIERZ RÓŻNICĘ DATY (s, "1970-01-01 00:00:00", pole daty)
Unix / Linux data +% s -d "1 stycznia 1980 00:00:01"

Konwertowanie czasu uniksowego na datę czytelną dla człowieka...
PHP Data ( Format, czas uniksowy);
Rubin Godzina.w ( czas uniksowy)
Pyton importuj najpierw czas, potem time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( czas uniksowy)) Zastąp time.localtime time.gmtime dla daty GMT.
Jawa String date = new java.text.SimpleDateFormat ("dd/MM/rrrr GG:mm:ss"). Format (nowy java.util.Date ( czas uniksowy*1000));
VBScript / ASP DataDodaj ("s", czas uniksowy, "01/01/1970 00:00:00")
PostgreSQL WYBIERZ ZNACZNIK CZASOWY Z "EPOKĄ" + czas uniksowy* INTERWAŁ „1 sekunda”;
MySQL from_unixtime ( czas uniksowy, opcjonalny, format wyjściowy) Standardowy format wyjściowy RRRR-MM-DD GG: MM: SS
Serwer SQL DATEADD (s, czas uniksowy, "1970-01-01 00:00:00")
Microsoft Excel = (A1 / 86400) + 25569 Wynik będzie w strefie czasowej GMT. Dla innych stref czasowych: = ((A1 +/- różnica czasu dla strefy) / 86400) + 25569.
Linux data -d @ 1190000000
Inne systemy operacyjne Wiersz poleceń: perl -e "print skalar (czas lokalny ( czas uniksowy)) "(Jeśli Perl jest zainstalowany) Zastąp" localtime "na" gmtime "dla strefy czasowej GMT / UTC.

Co to jest czas Unix lub epoka Unix (epoka Unix lub czas Unix lub czas POSIX lub znacznik czasu Unix)?

UNIX-time lub POSIX-time (angielski czas Unix) - sposób kodowania czasu, akceptowany w UNIX i innych systemach operacyjnych zgodnych z POSIX.
Za początek odliczania uważa się północ (UTC) od 31 grudnia 1969 do 1 stycznia 1970, czas od tego momentu nazywany jest „erą UNIX” (angielska epoka Uniksa).
Czas UNIX jest zgodny z UTC, w szczególności, gdy sekundy przestępne są zadeklarowane UTC, odpowiednie liczby sekund są powtarzane.
Metoda przechowywania czasu w postaci liczby sekund jest bardzo wygodna w przypadku porównywania dat (z dokładnością do sekundy), a także przechowywania dat: w razie potrzeby można je przekonwertować na dowolny czytelny format. Data i godzina w tym formacie również zajmują bardzo mało miejsca (4 lub 8 bajtów, w zależności od wielkości słowa maszynowego), dlatego rozsądnie jest używać go do przechowywania dużej ilości dat. Wady wydajności mogą wystąpić, jeśli bardzo często uzyskujesz dostęp do elementów daty, takich jak numer miesiąca itd. Jednak w większości przypadków bardziej wydajne jest przechowywanie czasu jako pojedynczej wartości niż zestawu pól.

Konwersja ery Uniksa na datę czytelną dla człowieka


Data rozpoczęcia i zakończenia uniksowego roku, miesiąca lub dnia


Zamiana sekund na dni, godziny i minuty


Jak uzyskać czas uniksowy w ...

Perlczas
PHPczas ()
RubinCzas.teraz (lub Czas.nowy). Do wyjścia: Time.now.to_i
Pytonnajpierw importuj czas, potem time.time ()
Jawadługa epoka = System.currentTimeMillis () / 1000;
Microsoft .NET C #epoka = (DateTime.Now.ToUniversalTime (). Ticks - 621355968000000000) / 10000000;
VBScript / ASPDateDiff ("s", "01/01/1970 00:00:00", teraz ())
Erlangkalendarz: datetime_to_gregorian_seconds (kalendarz: now_to_universal_time (teraz ())) - 719528 * 24 * 3600.
MySQLSELECT unix_timestamp (teraz ())
PostgreSQLSELECT ekstrakt (epoka FROM teraz ());
Serwer SQLWYBIERZ DATEDIFF (s, "1970-01-01 00:00:00", GETUTCDATE ())
JavaScriptMath.round (nowy Date (). GetTime () / 1000.0) getTime () zwraca czas w milisekundach.
Unix / Linuxdata +% s
Inne systemy operacyjneWiersz poleceń: perl -e "print time" (jeśli Perl jest zainstalowany w twoim systemie)

Konwertowanie daty na czas uniksowy na...

PHPmktime ( zegarek, minuty, sekundy, miesiąc, dzień, rok)
RubinCzas.lokalny ( rok, miesiąc, dzień, zegarek, minuty, sekundy, usec) (lub Time.gm dla wyjścia GMT / UTC). Aby wyświetlić dodaj .to_i
Pytonnajpierw zaimportuj czas, potem int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Jawadługa epoka = nowa java.text.SimpleDateFormat ("dd / MM / rrrr GG: mm: ss"). parse ("01/01/1970 01:00:00");
VBScript / ASPDateDiff ("s", "01/01/1970 00:00:00", pole daty)
MySQLSELECT unix_timestamp ( czas) Format czasu: RRRR-MM-DD GG: MM: SS lub RRMMDD lub RRRRMMDD
PostgreSQLSELECT ekstrakt (data epoki FROM ("2000-01-01 12:34"));
Z sygnaturą czasową: WYBIERZ WYCIĄG (EPOCH OD ZNACZNIKA CZASOWEGO Z STREFĄ CZASOWĄ „2001-02-16 20: 38: 40-08”); Z interwałem: WYBIERZ WYCIĄG (EPOCHA Z PRZEDZIAŁU „5 dni 3 godziny”);
Serwer SQLWYBIERZ RÓŻNICĘ DATY (s, "1970-01-01 00:00:00", pole daty)
Unix / Linuxdata +% s -d "1 stycznia 1980 00:00:01"

Konwertowanie czasu uniksowego na datę czytelną dla człowieka...

PHPData ( Format, czas uniksowy);
RubinGodzina.w ( czas uniksowy)
Pytonimportuj najpierw czas, potem time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( czas uniksowy)) Zastąp time.localtime time.gmtime dla daty GMT.
JawaString date = new java.text.SimpleDateFormat ("dd/MM/rrrr GG:mm:ss"). Format (nowy java.util.Date ( czas uniksowy*1000));
VBScript / ASPDataDodaj ("s", czas uniksowy, "01/01/1970 00:00:00")
PostgreSQLWYBIERZ ZNACZNIK CZASOWY Z "EPOKĄ" + czas uniksowy* INTERWAŁ „1 sekunda”;
MySQLfrom_unixtime ( czas uniksowy, opcjonalny, format wyjściowy) Standardowy format wyjściowy RRRR-MM-DD GG: MM: SS
Serwer SQLDATEADD (s, czas uniksowy, "1970-01-01 00:00:00")
Microsoft Excel= (A1 / 86400) + 25569 Wynik będzie w strefie czasowej GMT. Dla innych stref czasowych: = ((A1 +/- różnica czasu dla strefy) / 86400) + 25569.
Linuxdata -d @ 1190000000
Inne systemy operacyjneWiersz poleceń: perl -e "print skalar (czas lokalny ( czas uniksowy)) "(Jeśli Perl jest zainstalowany) Zastąp" localtime "na" gmtime "dla strefy czasowej GMT / UTC.

Do czego służy narzędzie „Konwerter Unixtime”?

Narzędzie to przyda się przede wszystkim webmasterom, którzy stale mają do czynienia z dużą ilością dat lub często odwołują się do ich elementów w swojej pracy. Korzystając z narzędzia "Unixtime Converter", możesz łatwo przekonwertować czas uniksowy na przyjazną dla użytkownika datę (i vice versa), dowiedzieć się o aktualnym czasie uniksowym i uzyskać czas uniksowy w inne języki programowanie, DBMS i systemy operacyjne.

Co to jest czas uniksowy?

Era Uniksa (epoka Unixa) rozpoczęła się w nocy z 31 grudnia 1969 na 1 stycznia 1970. To właśnie ta data została przyjęta jako punkt wyjścia dla czasu "komputerowego", który jest liczony w sekundach i zajmuje bardzo mało miejsca na dysku - tylko 4 lub 8 bajtów. Dzięki tej metodzie kodowania programiści mogą „ukryć” dowolną datę w jednej liczbie i łatwo przekonwertować ją z powrotem na format zrozumiały dla użytkowników.

Czas uniksowy (zwany także czasem uniksowym lub czasem POSIX) jest wygodny w użyciu w różnych systemach operacyjnych i językach programowania, ponieważ jest wyświetlany jako pojedyncza wartość, a nie określona liczba pól zajmujących miejsce. Dodatkowo czas UNIX jest w pełni zgodny ze standardem UTC (również w latach przestępnych) – w tym przypadku odpowiednie wartości sekund są po prostu powtarzane.

Terminologia uniksowa

Kilka słów o warunkach.

Więc, Czas uniksowy(lub czas POSIX) to liczba sekund, które upłynęły od północy 1 stycznia 1970 roku do chwili obecnej.

Sygnatura czasowa systemu Unix(timestamp) to „stały” czas, innymi słowy, konkretna data wybita w liczbie.

UTC(Universal Coordinated Time) to uniwersalny czas koordynowany, który jest „ustalony” na południku zerowym i od którego liczone są geograficzne strefy czasowe.

Jak „trwały” jest system?

Już za kilkadziesiąt lat, a mianowicie 19 stycznia 2038 o 03:14:08 UTC, czas uniksowy osiągnie wartość 2147483648, a systemy komputerowe mogą zinterpretować tę liczbę jako ujemną. Kluczem do rozwiązania tego problemu jest użycie 64-bitowej (zamiast 32-bitowej) zmiennej do przechowywania czasu. W tym przypadku zasób wartości liczbowych czasu uniksowego wystarczy ludzkości na kolejne 292 miliardy lat. Nieźle, prawda?

Czas uniksowy jest jeden dla wszystkich

Jeśli mieszkasz w Londynie lub San Francisco, a twoi znajomi są w Moskwie, możesz „synchronizować zegarki” za pomocą czasu uniksowego: ten system jest w ten moment czas jest jeden dla całego świata. Oczywiście, jeśli czas na serwerach jest ustawiony poprawnie. I z narzędziem "Konwerter Unixtime" ta konwersja zajmie Ci ułamek sekundy.

To narzędzie jest potrzebne do konwersji daty z formatu Unix TimeStamp na datę czytelną dla człowieka i odwrotnie.

Co to jest czas uniksowy i do czego służy? Aby zrozumieć, do czego to służy, zacznę od ogólna koncepcja czym dokładnie jest czas uniksowy.

Czas uniksowy (lub TimeStamp, co w tłumaczeniu na rosyjski oznacza „znacznik czasu” i ma to samo znaczenie) to liczba sekund od 1 stycznia 1970 r. Oznacza to, że Unix TimeStamp z 01.01.1970 00:00:00 był równy 0. Po 2 minutach (120 sekundach) czas Unix wynosił już 120. Na przykład dni później (01.02.1970 00: 00:00) Czas uniksowy był równy 86400, ponieważ minęło 60 * 60 * 24 = 86400 sekund. Teraz Unix Time Stamp to już 1566148027, a liczba stale rośnie, ponieważ sekundy ciągle tykają.

Ale po co go używać? Chodzi o to, że Unix TimeStamp jest wygodny w użyciu do przechowywania i manipulowania datami podczas programowania. Nie będę wdawał się w szczegóły, ale w skrócie, liczba jest o wiele wygodniejsza do czytania i porównywania niż ciąg z „lewymi” znakami. Dlatego większość programistów używa Unix TimeStamp do pracy z datą w swoich projektach, a w bazie danych często widzimy jedną bardzo dużą liczbę w polu `date`, która wcale nie wygląda jak data.

Tutaj przydaje się to narzędzie. Dzięki niemu możesz łatwo przetłumaczyć tę „dużą liczbę z bazy” na datę czytelną dla człowieka. Ponadto możesz nawet zrobić coś przeciwnego i zmienić dowolną datę w Unix TimeStamp. Takie są możliwości, jakie daje ten konwerter.

Problem roku 2038

Jak powiedziałem, liczba Uniksowy znacznik czasu każda sekunda staje się większa o 1. Prędzej czy później granica tej liczby musi nadejść i będzie akurat w 2038 roku. Rzecz w tym, że maksymalna liczba 32-bitowych systemów operacyjnych rozpowszechnionych na początku XXI wieku to 2 31. Jest to liczba, którą Unix TimeStamp osiągnie w 2038 roku.

→ Rozwiązanie tego problemu zostało już znalezione. Aby zapewnić, że w 2038 strony nie przestaną poprawnie liczyć czasu, wystarczy użyć wersji 64-bitowej system operacyjny na hostingu / VDS / serwerze dedykowanym, a nie 32-bitowym. Wraz z aktywnie rosnącymi możliwościami komputerów i spadkiem ich kosztów wszystko sprowadza się do tego, że do 2038 roku zdecydowana większość usług z zakresu udostępnienia miejsca dla witryny będzie świadczona w oparciu o 64-bitowy system operacyjny. Nawiasem mówiąc, w systemie 64-bitowym taki problem nie dotknie nas przez co najmniej 292 miliardy lat, co wystarczy do liczenia problem 2038 rozwiązany.

Tylko dla czytelników Lifeexample istnieje możliwość otwarcia sklepu internetowego na Moguta.CMS z 15% rabatem

Unix Time i Unix Timestamp (MySQL, PHP, JavaScript)

Witam, drodzy czytelnicy bloga, w tym artykule chcę Wam opowiedzieć o tym, czym jest Czas uniksowy oraz Sygnatura czasowa systemu Unix... Programiści często łączą te koncepcje w jedno, ale to nie do końca prawda. Ponadto artykuł zawiera wiele przydatnych uwag na temat pracy z Unix Timestamp w PHP, MySQL i JavaScript.

Dlaczego czas uniksowy zaczyna się 1 stycznia 1970

Rzecz w tym, że czas uniksowy zaczyna liczyć erę uniksową, wraz z wydaniem pierwszego Systemy UNIX... Pierwszy tego typu system powstał w 1969 roku, więc twórcy przyjęli datę 1 stycznia 1970 roku o północy UTC ( UTC).

Zrozummy, do czego służą czas Unix i Unix Timestamp, i dajmy im jasne koncepcje.

Sygnatura czasowa systemu UnixJest znacznikiem czasu, który jest sekwencją znaków reprezentującą liczbę sekund, które upłynęły od 1 stycznia 1970 r.

Postaram się podać przykład, aby wyjaśnić różnicę między tymi dwoma pojęciami.

W momencie pisania tego przeze mnie, Czas uniksowy było równe 1346765877 .

W momencie czytania przez Ciebie tych informacji, zapis czasu ( 1346765877 ) jest już etykietą - Sygnatura czasowa systemu Unix! Konwertując ten znacznik czasu do postaci czytelnej, otrzymujemy datę 04-09-2012 i godzinę 17:37:57.

Szczerze mówiąc, moim zdaniem nie ma specjalnego sensu w rozdzielaniu tych dwóch pojęć, ale nadal warto mieć pojęcie o tym, co stanowi Czas uniksowy warto też zrozumieć, że liczba maksymalnych możliwych sekund od 1970 roku ma swój limit!

Koniec ery Uniksa nadejdzie w 2038 roku

Fakt: maksymalny Liczba binarna w systemach 32-bitowych to liczba 01111111 11111111 11111111 11111111 konwertując go na system dziesiętny, otrzymujemy numer 2147483647.

19 stycznia 2038 o 03:14:08 nadejdzie moment, w którym liczba sekund, które minęły od początku ery Uniksa przekroczy maksimum dostępne w systemie 32-bitowym, liczba = 2147483647. W przypadku przepełnienia bitów data zostanie Resetowanie.

Bardzo łatwo jest przetestować tę teorię na przykładowym przykładzie:

  • Otwórz standardowy kalkulator Windows naciśnij ALT + 3, to przekonwertuje go na widok inżynierski;
  • Ustaw tryb 4 bajtowy i typ wprowadzania dziesiętnego;
  • Wpisz numer 2147483647;

  • Zwróć uwagę na binarną reprezentację liczby;
  • Dodaj jeden do liczby;

  • Dodanie spowoduje liczbę ujemną!

Jeśli nadal dodamy jeden, otrzymamy cykliczne zamknięcie.

Ten rodzaj dzwonka dat pojawi się od 19 stycznia 2038 r. we wszystkich systemach korzystających z architektury 32-bitowej.

W rzeczywistości nie ma powodów do smutku, ponieważ twórcy systemów komputerowych coraz częściej wprowadzają do powszechnego użytku architektury 64-bitowe. Miejmy nadzieję, że zdążą do 2038 roku.

Porozmawiajmy teraz o używaniu uniksowego znacznika czasu w php, mysql a nawet w javascript.

Praca z uniksowym znacznikiem czasu

Bardzo ważnym punktem podczas pracy z uniksowym znacznikiem czasu w php lub mysql jest potrzeba jasnego zrozumienia zalet i wad tego formatu daty.

Na przykład, ZNAK CZASU nie może służyć do określania wydarzeń historycznych lub wydarzeń z odległej przyszłości. Cały zestaw dat jest ograniczony do okresu od 1970 do początku 2038 roku. Jeśli ustawisz datę poza 2038, nie zostanie ona poprawnie zinterpretowana przez system 32-bitowy.

Zdając sobie sprawę z tego ograniczenia, pojawia się logiczne pytanie: „ Po co zawracać sobie głowę przedstawianiem daty w sekundach?"

Kiedy używać Unix Timestamp?

Do reprezentowania czasu w naszym zwykłym systemie jego mierzenia potrzeba 8 bajtów, a dla uniksowego znacznika czasu jest to o połowę mniej - 4 bajty.

Oszczędność ilości danych, moim zdaniem, jest głównym i niepodważalnym plusem korzystania z Unix Time.

Ponadto podczas pracy z nimi dostępnych jest wiele przydatnych niuansów Sygnatura czasowa UNIX w mysql... A ponieważ wszystkie informacje muszą być przechowywane na serwerze bazy danych, a to z kolei ma szereg zalet podczas pracy z uniksowymi znacznikami czasu, wybór uniksowego znacznika czasu można prawidłowo uzasadnić następującymi postanowieniami.

MySQL zapewnia odpowiedni typ danych Timestamp do pracy z formatem czasu uniksowego, ustawienie którego od razu uzyskujemy użyteczną przewagę nad formatami standardowymi DATA oraz DATA GODZINA... Zaletą jest to, że wykonując operację dodawania nowe wejście do tabeli, kolumna z tym typem danych jest wypełniana automatycznie. Oznacza to, że możemy zaoszczędzić nie tylko na ilości danych, ale również na czasie procesora serwera WWW.

Aby wzmocnić słowo czynami, postawiliśmy sobie następujące zadanie: rejestrując nowego użytkownika w systemie, musisz wpisać datę jego dodania do bazy.

Jeśli typ pola przechowującego datę w tabeli to DATA GODZINA, a następnie prośba od Skrypt PHP będzie wyglądać mniej więcej tak:

Korzyści są oczywiste!

Jest też minus: jeśli istnieje kilka pól TIMESTAMP, tylko pierwsze jest automatycznie aktualizowane.

Czy ma sens używanie INT zamiast znacznika czasu?

Wielu programistów, pracując z uniksowym znacznikiem czasu, używa formatu liczb całkowitych int (11). Jest to zupełnie nierozsądne podejście do pytania, ponieważ MySQL udostępnia wiele przydatnych funkcji dla typu timestamp, które wpływają na szybkość pracy z nim. Dlatego przechowując znacznik czasu w INT, pozbawiamy się wszelkiej obsługi serwera dla tego formatu. Jest to mniej więcej to samo, co przechowywanie identyfikatora w typie varchar (11).

Jest jednak jedna wymówka, żeby się zatrzymać uniksowy znacznik czasu do INT... Podczas przenoszenia bazy danych pomiędzy różnymi DBMS może wystąpić konflikt typów, tj. w przypadku jednego z DBMS typ znacznika czasu może być nieznany. W takim przypadku użycie int będzie miało pierwszeństwo, ponieważ ten format jest we wszystkich DBMS.

Krótka charakterystyka typów kalendarzy MySQL

ZNAK CZASU- typ danych do przechowywania daty i czasu. Dane są przechowywane jako liczba sekund od początku „ery Uniksa”. Zakres wartości to 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Zajmuje 4 bajty.

DATA- typ danych do przechowywania daty. Zakres wartości to od 1000-01-01 do 9999-12-31. Zajmuje 3 bajty.

DATA GODZINA- typ danych do przechowywania daty i czasu. Zakres wartości to 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Zajmuje 8 bajtów i jest przechowywany jako liczba RRRRMMDDGGMMSS./p>

ROK- typ danych do przechowywania roku. Zakres wartości: 1901 - 2155. Zajmuje 1 bajt.

CZAS- typ danych do przechowywania czasu. Zakres wynosi -828:59:59 - 828:59:59. Zajmuje 3 bajty.

Tłumaczenie daty w systemie Unix

Czas przygotować kilka przydatnych funkcji do tłumaczenia daty na uniksowy znacznik czasu i z powrotem z czas uniksowy w czytelnym dniu.

Jak uzyskać aktualny czas UNIX

  • PHP:

    czas ();

  • JavaScript:

    Math.round (nowa Data () .getTime () / 1000,0);

  • MySQL:

    SELECT unix_timestamp (teraz ());