Kūrėjo vadovas Unix laiko žymės konvertoriui
Įvaldykite Unix laiko žymės konverterį. Išmokite konvertuoti epochos laiką į žmogui skaitomas datas, tvarkykite skirtingas kalbas ir venkite dažnų programuotojų klaidų.

Rekomenduojamos plėtiniai
Unix laiko žymės keitiklis yra vienas iš tų paprastų, bet nepakeičiamų įrankių, kurio jums kaip kūrėjui ar duomenų analitikui nuolat prireiks. Tai patogus įrankis, kuris ilgą, atsitiktinai atrodantį skaičių paverčia mums suprantama data ir laiku. Šis vertimas yra labai svarbus, kai naršote sistemos žurnaluose, dirbate su API arba užduodate klausimus duomenų bazėse, kur laikas saugomas šiuo ypač efektyviu formatu.
Kas yra Unix laiko žymė ir kodėl tai svarbu

Prieš galėdami iš tikrųjų įvertinti gerą keitiklį, turite suprasti, kas tas skaičius iš tiesų yra. Savo esme Unix laiko žymė yra tiesiog sekundžių skaičiavimas. Ji seka nuo 1970 m. sausio 1 d. 00:00:00 UTC praėjusių sekundžių bendrą skaičių. Tas konkretus laiko momentas yra žinomas kaip "Unix epocha".
Kodėl toks metodas? Paprastumas ir efektyvumas. Laiko saugojimas kaip vientisas sveikas skaičius yra daug kompaktiškesnis ir našesnis nei ilgas eilutės formatas, pavyzdžiui, "Penktadienis, sausio 1 d., 2021 12:00:00 AM GMT". Tai jį puikiai tinka kelioms pagrindinėms sritims:
- Duomenų bazės saugykla: Laiko žymės yra mažos, todėl jas greitai indeksuoti ir užklausti. Tai didelis pranašumas našumui.
- API duomenų paketai: Vieno skaičiaus siuntimas pirmyn ir atgal yra daug mažiau imlus pralaidumui nei visos datos eilutės siuntimas, todėl atsako laikai yra greitesni.
- Žurnalo failai: Kai analizuojate žurnalus iš dešimčių skirtingų sistemų, vienodos, nuo kalbos nepriklausančios laiko žymės buvimas yra išgelbėjimas.
- Skaičiavimai: Reikia sužinoti, kiek laiko truko procesas? Tiesiog atimkite pradžios laiko žymę iš pabaigos laiko žymės. Tai paprasta sveikų skaičių matematika.
Sekundės vs. Milisekundės ir daugiau
Klasikinė Unix laiko žymė yra 10 skaitmenų skaičius, atitinkantis sekundes. Bet kai technologija vystėsi, poreikis tikslesniam laiko matavimui augo. Čia pradėsite matyti skirtingo ilgio laiko žymas, ir tai dažna klaidų priežastis.
Štai greita apžvalga, ką dažniausiai sutiksite realioje aplinkoje. Vienos formato sumaišymas su kitu yra klasikinė "tūkstančio kartų" klaida, kuri gali lemti labai supainiojančias programų klaidas.
Dažni Unix laiko žymų formatai vienu žvilgsniu
| Vienetas | Skaitmenys | Tipinis naudojimo atvejis | Pavyzdinis reikšmė (tam pačiam momentui) |
|---|---|---|---|
| Sekundės | 10 | Standartas daugumai galinės sistemos, duomenų bazių ir API. | 1609459200 |
| Milisekundės | 13 | Labai dažnos web technologijose, ypač JavaScript. | 1609459200000 |
| Mikrosekundės | 16 | Naudojamos didelės spartos prekyboje ar moksliniuose skaičiavimuose. | 1609459200000000 |
Šių formatų supratimas yra raktas. Jei įrankis tikisi sekundžių, o jūs jam pateikiate milisekundes, gausite datą, kuri yra tūkstančius metų ateityje. Tai klaida, kurią visi esame padarę kada nors!
Garsioji 2038 metų problema
Elegantiškas Unix laiko žymos paprastasumas taip pat sukėlė tiksintį laiko bombą: "2038 metų problemą". Senesnėse 32 bitų sistemose laiko žymės buvo saugomos kaip ženkluotas 32 bitų sveikas skaičius. Problema yra ta, kad šio tipo sveikas skaičius turi ribą – jis negali laikyti skaičiaus, didesnio nei 2,147,483,647.
2038 m. sausio 19 d., 03:14:07 UTC, nuo epochos praėjusių sekundžių skaičius viršys šią ribą. Tai įvykus, sveikasis skaičius „susisuktų“ ir taptų neigiamu skaičiumi. Tai priverstų pažeidžiamas sistemas interpretuoti datą kaip esančią praeityje, 1901, o tai galėtų sukelti milijardų vis dar esančių senų įrenginių gedimus. Daugiau įžvalgų apie Unix epochą ir jos poveikį galite rasti „StrongDM“ ekspertų.
Laimei, tai nėra kažkas, dėl ko dauguma mums turi nerimauti kasdien. Didžioji dalis šiuolaikinių sistemų perėjo prie 64-bit sveikųjų skaičių laikui sekti. 64-bit sveikasis skaičius yra toks milžiniškas, kad neperpildys dar 292 milijardus metųtaip efektyviai išsprendžiant problemą visam laikui.
Vis dėlto tai yra puiki kompiuterijos istorijos dalis ir labai svarbios žinios, jei kada nors teks dirbti su senesnėmis įterptosiomis sistemomis ar paveldėtomis kodų bazėmis. Šių pagrindų supratimas bet kurį Unix laiko žymos keitiklį paverčia daug galingesniu jūsų turimu įrankiu.
Palengvinkite konversijas savo naršyklėje
Nors terminalo komanda ar kodo fragmentas veikia, tai ne visada yra greičiausias būdas atlikti darbą. Kartais jums tiesiog reikia atsakymo šiuo metu, nesutrikdant dėmesio ar nekeičiant langų. Čia ir pasireiškia gero naršyklės pagrįsto įrankio vertė, ypač specializuoto Unix laiko žymos keitiklio kuris gyvena tiesiai jūsų naršyklėje.
Tikroji magija čia slypi gebėjime išlaikyti darbo srautą. Įsivaizduokite tai: naršote per API atsakymą naršyklės kūrėjų įrankiuose ir pastebite laiko žymę. Užuot atidarę kitą skirtuką ar paleidę terminalą, paspaudžiate greitą klavišų kombinaciją, įklijuojate skaičių ir iš karto gaunate atsakymą. Būtent toks sklandus darbo procesas gaunamas naudojant tokius įrankius kaip ShiftShift Extensions, kurie sujungia daug naudingų įrankių į vieną Komandų paletę.
Gaukite momentinius atsakymus naudodami klavišų kombinaciją
Viskas priklauso nuo greičio. Naudojant tokią priemonę kaip ShiftShift, greitas dvigubas paspaudimas Shift klavišą (arba Cmd+Shift+P „Mac“ kompiuteryje) atidaro komandų juostą. Tiesiog pradėkite rašyti „timestamp,“ ir konverteris pasirodo. Įklijuokite savo reikšmę ir iš karto gausite žmogui suprantamą datą.
Štai kaip tai atrodo – Komandų paletė yra paruošta ir laukia, kad konvertuotų laiko žymę tiesiai virš jūsų dabartinio puslapio.
Geriausia dalis yra tai, kaip ji integruojasi netrukdydama. Konverteris yra tik vienas iš daugelio įrankių, esančių tame pačiame lange, todėl jums niekada nereikia palikti to, ką darote.
Šis požiūris yra išsigelbėjimas programuotojams, testuotojams ir visiems, kurie praktiškai gyvena savo naršyklėje. Be to, konversija vyksta visiškai jūsų kompiuteryje. Jautrūs duomenys iš žurnalų arba API atsakymų niekada nepalieka jūsų kompiuterio, o tai yra didelis privatumo pranašumas.
Galimybė konvertuoti laiko žymą, pervadinti netvarkingą JSON blob'ą ir tada apskaičiuoti laiko skirtumą – visa tai iš tos pačios sąsajos – yra didelis laiko taupymas. Ji paverčia nepatogų, daugia priemonių reikalaujantį procesą į vieną, sklandų veiksmą.
Daugiau nei tik vienos gudrybės arkliukas
Puiki naršyklės naudingumo priemonė retai būna tik vienas įrankis; ji yra visos įrankių dėlės dalis. Dažnai naudosite laiko žymos konverterį kartu su kitomis funkcijomis.
Pavyzdžiui, galite jį derinti su:
- A JSON ar SQL formatuotoju kad išvalytumėte kodą prieš išgaunant laiko žymą.
- A įmontuotas skaičiuotuvas greitam matematikos atlikimui su epoch reikšmėmis. (Galite pažaisti su panašiu įrankiu ShiftShift skaičiuotuvo puslapyje pažiūrėti, kaip tai veikia).
- A teksto palyginimo įrankis kad būtų galima pastebėti skirtumus tarp dviejų API atsakymų, laiko žymų ir visko.
Visų šių būtinų elementų turėjimas vienoje vietoje sukuria žymiai greitesnę ir darnesnę darbo eigą. Tai ne tik dėl patogumo – tai apie visų tų mažų, pasikartojančių pertraukimų pašalinimą, kurie susikaupia ir per dieną sunaikina jūsų produktyvumą.
Praktiniai laiko žymų konvertavimai kode
Jei esate programuotojas, žinote, kad žaidimas su laiko žymomis yra tiesiog darbo dalis. Bet būkime sąžiningi, sintaksė niekada nėra visiškai tokia pati nuo vienos kalbos iki kitos. Ši skiltis yra jūsų vadovas, prisotintas kodo fragmentų, kuriuos galite paimti ir iškart naudoti platformose, su kuriomis iš tikrųjų dirbate. Jokių senų Stack Overflow gijų ieškojimų – tik praktiniai pavyzdžiai, kad galėtumėte judėti pirmyn.

Nesvarbu, ar tvarkote duomenis žiniatinklio priekinėje dalyje, rašote Python scenarijų, ar atliekate duomenų bazės užklausą, epochos laiko konvertavimas yra pagrindinis įgūdis. Peržvelgsime dažniausiai pasitaikančius scenarijus – nuo epochos sveikojo skaičiaus pavertimo skaitoma eilute ir atvirkštinio proceso.
Laiko žymų konvertavimas JavaScript
Pagrindinis čia naudojamas įrankis yra JavaScript Date objektas, tačiau jis turi vieną didelį ypatumą, kuris nuolat klaidina kūrėjus: jis veikia milisekundėmis, o ne sekundėmis. Tai klasikinis klaidų šaltinis, kai priekinė dalis bendrauja su užpakaline dalimi, naudojančia standartines 10 skaitmenų, sekundžiais pagrįstas laiko žymas.
Norint teisingai konvertuoti standartinę Unix laiko žymą (sekundėmis) į Date objektą, turite ją padauginti iš 1000.
// A standard 10-digit Unix timestamp (in seconds)
const unixTimestamp = 1672531200;
// Convert to milliseconds, then create a Date object
const dateObject = new Date(unixTimestamp * 1000);
// Format into a readable UTC string
// Output: Sun, 01 Jan 2023 00:00:00 GMT
console.log(dateObject.toUTCString());
Reikia dabartinės laiko žymos? Date.now() pateikia ją milisekundėmis. Tiesiog nepamirškite padalinti iš 1000 ir suapvalinti žemyn prieš siunčiant standartinę 10 skaitmenų laiko žymą atgal į API.
Konvertavimas su Python
Užpakalinėje dalyje Python datetime modulis yra itin naudingas. Jis yra neįtikėtinai lankstus ir puikiai palaiko laiko juostų sąmoningus konvertavimus, todėl yra patikimas pasirinkimas paslaugoms, kurioms reikia tiksliai apdoroti laiką skirtinguose regionuose.
Štai paprastas būdas konvertuoti laiko žymą naudojant datetime biblioteką:
import datetime
Standartinė 10 skaitmenų Unix laiko žyma
unix_timestamp = 1672531200
Konvertuoti laiko žymą į datetime objektą
datetime_obj = datetime.datetime.fromtimestamp(unix_timestamp)
Suformatuoti ją į aiškią, žmogui skaitomą eilutę
Išvestis: 2023-01-01 00:00:00
print(datetime_obj.strftime('%Y-%m-%d %H:%M:%S'))
Šis paprastas būdas suteikia jums aiškų ir patikimą metodą valdyti epochos laiką savo Python programose. O jei dirbate su sudėtingomis duomenų struktūromis, tokiomis kaip JSON, kuriose yra laiko žymų, mūsų vadovas naudojant JSON formatuotoją gali būti naudingas derinant.
Konvertavimas duomenų bazėse su SQL
Duomenų bazės dažnai saugo laiką kaip Unix laiko žymas, nes tai efektyvu. Gera žinia yra tai, kad dauguma SQL kalbos variantų turi įmontuotas funkcijas, kad galėtumėte apdoroti šiuos konvertavimus tiesiai savo užklausose. Tai kur kas efektyviau nei traukti žalius sveikuosius skaičius laiko žymoms ir konvertuoti juos savo programos kode.
Unix laiko žyma yra beveik universali, naudojama daugiau nei 90% programavimo kalbų – nuo JavaScript Date.now() iki Python time.time() – ir užtikrina trilijonų kasdienių operacijų veikimą. Teisingas laiko juostų nustatymas yra kritiškai svarbus; patikimas unix laiko žymos keitiklis gali apdoroti daugiau nei 400 IANA zonų, o tai padeda išvengti klaidų apytikriai 62% pasaulinių programų, kurios nesaugo laiko juostų aiškiai. Daugiau informacijos apie šių įrankių pasaulinį naudojimą galite rasti Fossa.
Kūrėjams galimybė formatuoti SQL, konvertuoti laiko žymas ir skaičiuoti epochos skirtumus niekur neišeinant iš savo kompiuterio yra didelis našumo laimėjimas. Šis pirmiausia vietinis požiūris taip pat padeda laikytis šiuolaikinių duomenų privatumo standartų, tokių kaip GDPR ir CCPA.
MySQL pavyzdys
MySQL naudosite FROM_UNIXTIME() funkciją dažniausiai. Ji priima epochos sveikąjį skaičių ir tvarkingai konvertuoja jį į standartinį DATETIME formatą.
SELECT FROM_UNIXTIME(1672531200);
-- Grąžina: '2023-01-01 00:00:00'
Norint nueiti atgal – nuo datos eilutės iki epochos laiko žymos – tiesiog naudokite UNIX_TIMESTAMP().
SELECT UNIX_TIMESTAMP('2023-01-01 00:00:00');
-- Grąžina: 1672531200
PostgreSQL pavyzdys
PostgreSQL naudoja šiek tiek kitokią, bet ne mažiau galingą funkciją: to_timestamp(). Ši funkcija tiesiogiai konvertuoja Unix laiko žymą į TIMESTAMP WITH TIME ZONE reikšmę.
SELECT to_timestamp(1672531200);
-- Grąžina: 2023-01-01 00:00:00+00
Kadangi ji iš karto atsižvelgia į laiko juostą, tai yra labai patikimas pasirinkimas programoms, kurios aptarnauja pasaulinę auditoriją, kur laiko tikslumas yra būtinas.
Laiko žymų konvertavimas terminale.
Jei dirbate komandų eilutėje, perjungimas į naršyklę ar grafinę sąsają greitai laiko žymos konversijai tikrai sutrikdo darbo eigą. Tai tiesiog nutraukia jūsų koncentraciją. Gera žinia ta, kad to daryti nereikia; tiek Linux, tiek macOS turi galingas, natyvias priemones šioms konversijoms atlikti, niekur nepalikdami terminalo.
Pagrindinė šiam tikslui skirta programinė priemonė yra paprasta komanda date. Ji yra beveik kiekvienoje Unix tipo sistemoje, bet yra vienas niuansas: naudojimo sintaksė kaip unix laiko žymos konvertavimo priemonė skiriasi tarp Linux (GNU) ir macOS (BSD). Šis skirtumas yra raktas norint kiekvieną kartą viską atlikti teisingai.
Laiko žymų konvertavimas Linux sistemoje.
Linux sistemoje sintaksė yra aiški ir lengvai įsimenama. Jūs tiesiog naudojate -d žymą, kad nurodytumėte datą, bet turite pasakyti, kad pateikiate epochos laiko žymą, pridėdami prieš ją @ simbolį.
Tarkime, jūs naršote žurnale ir pastebite laiko žymą 1704067200. Norėdami sužinoti, ką tai reiškia, paleistumėte šį komandą:
date -d @1704067200
Iš karto gausite žmogui suprantamą datą, pavyzdžiui Mon Jan 1 00:00:00 UTC 2024. Taip pat galite sutvarkyti šį išvesties formatą naudodami savo pasirinktą formatą.
date -d @1704067200 +"%Y-%m-%d %H:%M:%S"
Išvestis: 2024-01-01 00:00:00
Patarimas: Ši komanda tampa tikru galiūnu, kai pradedate per ją siųsti kitų komandų išvestį. Galite
greplaiko žymą iš didelio žurnalo failo ir tiesiogiai ją perduoti komandaidatemomentinei konversijai. Tai paverčia daugiažingsnio derinimo užduotį viena elegantiška komandos eilute.
Konversijų atlikimas macOS sistemoje.
Dabar, jei paleistumėte tą pačią Linux komandą Mac kompiuteryje, ji sukeltų klaidą. BSD versija, kurią naudoja macOS date, reikalauja žymos -r vietoj to, ir jai nereikia @ priešdėlio.
Štai kaip konvertuotumėte tą pačią laiko žymą Mac kompiuteryje:
date -r 1704067200
Kaip ir Linux versijoje, galite pridėti formatavimo parinktis, kad gautumėte tiksliai tokią išvestį, kokią norite.
date -r 1704067200 +"%Y-%m-%d %T %Z"
Išvestis: 2024-01-01 00:00:00 UTC
Šis mažas skirtumas yra klasikinis stabdymo taškas bet kam, kas dažnai peršoka tarp Linux ir macOS. Įsiminę abi versijas ateityje sutaupysite daug galvos skausmo.
Kai tik įvaldysite šias komandas, galėsite laiko žymų konversijas tiesiogiai įtraukti į savo apvalkalo scenarijus ir žurnalų analizę. Tai nedidelis įgūdis, bet jis susideda į rimtą našumo padidėjimą, išlaikydamas jus susikoncentravusį ties svarbiausiu darbu.
Dažnos laiko žymų klaidos ir kaip jų išvengti.
Darbas su Unix laiko žymomis atrodo paviršutiniškai tiesioginis, bet keletas klasikinių klaidų gali privesti prie tikrai varginančių klaidų. Šioms problemoms būdinga pasirodyti toli nuo to, kur iš tikrųjų įvyko klaida, todėl jas derinti yra tikras galvos skausmas. Laikykite šį skyrių savo praktiniu vadovu, kaip pastebėti ir išvengti dažniausiai pasitaikančių laiko žymų spąstų, kuriuos esu matęs per metus.
Sekundžių ir milisekundžių supainiojimas.
Dažniausiai pasitaikanti klaida yra sekundžių supainiojimas su milisekundėmis. Standartinė Unix laiko žyma yra 10 skaitmenų sveikasis skaičius, rodantis sekundžių skaičių nuo epochos. Bet daugelis sistemų, ypač JavaScript pasaulyje, dirba su 13 skaitmenų laiko žymomis milisekundėms. Kai priekinės dalies programa perduoda milisekundžių reikšmę galinės dalies programai, kuri tikisi sekundžių, viskas eina blogai.
Tam unix timestamp convertor, tas 13 skaitmenų skaičius atrodo kaip data, esanti tūkstančius metų ateityje. Tai gali nepastebimai sugadinti duomenų tikrinimą, planavimo logiką ir bet kokius istorinius įrašus, kuriuos bandote išlaikyti. Tai tokio tipo subtilus duomenų sugadinimas, kurio galbūt net nepastebėsite savaitėmis.
Laiko juostos spąstai
Kitas spąstas, į kurį pakliūna net patyrę programuotojai, yra laiko juostų tvarkymas. Savo apibrėžtimi Unix laiko žyma visada yra koordinuotoje universaliuoju laiku (UTC). Ji reiškia vieną, universalią momentą laike, visiškai nepriklausantį nuo vietos. Spąstas užsiverta, kai tai pamirštate ir manote, kad laiko žyma atspindi vartotojo vietinį laiką.
Ši klaida įvyksta, kai konvertuojate laiko žymą į skaitomą datą nenurodę laiko juostos. Jūsų sistema dažnai numatytuoju nustato serverio vietinį laiką, o tai sukelia chaosą. Vartotojas Niujorke gali matyti laiką, skirtą žmogui Londone, bet jis skiriasi keliomis valandomis.
Pagrindinė taisyklė yra paprasta: savo backend'e laiko žymas visada traktuokite kaip UTC. Saugokite jas UTC formatu, apdorokite kaip UTC ir tik vartotojo vietinį laiką konvertuokite front-end'e, būtent rodymo momentu.
Dažniausių laiko žymų konvertavimo klaidų trikčių šalinimas
Kai viskas nepavyksta, simptomai gali būti supainiojantys. Čia pateikiu greitąją nuorodų lentelę, kurią surinkau iš patirties, kad padėčiau jums greitai diagnozuoti ir išspręsti dažniausias problemas.
| Simptomas | Galima priežastis | Sprendimas |
|---|---|---|
| Data yra 52361 metais arba kuriame nors kitame tolimame ateities laike. | Milisekundės prieš sekundes. Jūs perduodate 13 skaitmenų milisekundžių laiko žymą funkcijai, kuri tikisi 10 skaitmenų sekundžių laiko žymos. | Prieš apdorodami padalykite laiko žymą iš 1000. Visada tikrinkite gaunamų laiko žymų skaitmenų skaičių. |
| Laikas skiriasi keliomis valandomis, bet data yra teisinga. | Laiko juostos netvarkymas. Laiko žyma buvo konvertuota naudojant serverio vietinį laiką, o ne vartotojo ar UTC. | Užtikrinkite, kad visos konversijos aiškiai nurodytų tikslinę laiko juostą. Konvertuokite į vietinį laiką tik kliento pusėje. |
| Data sustingusi ties 1970 m. sausio 1 d. | Netinkama arba tuščia laiko žyma. Laiko žymos reikšmė greičiausiai yra 0, null, arba undefined. |
Prieš bandydami konvertuoti, pridėkite patikrinimą, ar laiko žyma yra galiojimas teigimas sveikasis skaičius. Pateikite atsarginę reikšmę. |
Gaunate „Netinkama data“ arba NaN klaidą. |
Neteisingas duomenų tipas. Laiko žyma traktuojama kaip arba kitas neskaitmeninis tipas, kai reikalingas skaičius. | Aiškiai sukonvertuokite laiko žymą į sveikąjį skaičių (parseInt() JS, int() Python), prieš naudodami ją datų funkcijose. |
Atsiminkite, greitas įvesties patikrinimas gali jums sutaupyti valandų trikčių šalinimo vėliau.
Dviprasmiškumo vengimas naudojant standartinius formatus
Naudojimasis grynomis sveikųjų skaičių laiko žymomis perduodant duomenis tarp sistemų gali būti sumaišties priežastis. Todėl standartizuojant universalią eilučių formatą, tokią kaip ISO 8601 (2022-05-17T12:00:00Z), tai yra puiki gynybinė priemonė. Unix laiko žymų (pvz., 1652905200) konvertavimas į aiškų, savaime paaiškinantį formatą, kaip šis, padeda užkirsti kelią klaidoms maždaug 37% tarplaiko juostų API užklausų.
Atsižvelgiant į tai, kad 72% „Fortune 500“ kompanijų naudoja Unix laiko žymas žurnalų analizei, kur viena klaida gali kainuoti daugiau nei $10,000 per valandą prastovų, tikslumas yra viskas. Daugiau apie tai, kaip epochos laikas naudojamas skirtingose pramonėse, galite perskaityti EpochConverter.
Tiems, kurie tvarko duomenų bazes, nuoseklus laiko žymų tvarkymas yra toks pat svarbus. Jei dažnai kovojate su skirtingais laiko žymų formatais savo duomenų bazėje, mūsų vadovas naudojant galingą SQL formavimo įrankį gali padėti jums išlaikyti užklausas švarias ir nuspėjamas.
Šis sprendimų medis padeda jums pasirinkti tinkamą komandą jūsų operacinei sistemai, užkertant kelią sintaksės klaidoms, kai reikia greitos konversijos.

Aukščiau esanti schema aiškiai rodo esminį skirtumą tarp date komandos Linux (-d @...) ir macOS (-r ...) sistemose – tai dažna spąstų vieta kūrėjams, dirbantiems su skirtingomis aplinkomis.
Kad jūsų kodas būtų patikimesnis, visada atlikite patikrinimus, kad patvirtintumėte gaunamiems laiko žymenims ilgį. Paprasta funkcija, patikrinanti 10 skaitmenų (sekundės) arba 13 skaitmenų (milisekundės) reikšmę, gali sugauti šias klaidas dar prieš joms užkrėsdamos jūsų programos logiką.
Dažni klausimai apie Unix laiko žymes
Kai susipažinsite su Unix laiko žymėmis, beveik visada iškils keletas praktinių klausimų. Esu matęs, kaip įvairaus lygio kūrėjai į tai užkliūva, todėl paaiškinkime dažniausiai pasitaikančius, su kuriais susidursite kasdieniame darbe.
Kodėl daugelis API naudoja laiko žymes vietoj ISO 8601 eilučių?
Viskas visų pirma susiveda į gryną efektyvumą. Unix laiko žymė yra tik vienas skaičius, todėl ji yra neįtikėtinai kompaktiška, palyginti su tokiomis eilutėmis kaip '2023-10-27T10:00:00Z'. Mažesnis dydis reiškia mažiau duomenų, kuriuos reikia siųsti, taupant pralaidumą ir pagreitinant API atsakymus.
Jie taip pat yra visiškai nepriklausomi nuo kalbos. Nėra dviprasmiškumo, nėra klaidingo parsinimo ar regioninio formatavimo problemų. Mašinai skaičių apdorojimas visada greitesnis nei eilučių parsinimas, todėl bet kokie datos skaičiavimai, pavyzdžiui, laiko tarpas tarp dviejų įvykių, yra mažiau imlūs skaičiavimams. Didelio našumo sistemoms toks paprastumas yra didelis privalumas.
Koks yra teisingas būdas tvarkyti laiko zonas?
Tai yra svarbiausia dalis. Štai aukso taisyklė: Unix laiko žymė visada yra UTC. Joje nėra įgimtos laiko zonos sampratos. Tai tiesiog žaliavinių sekundžių skaičius nuo epochos.
Laiko zonos svarbios tik tada, kai norite tą laiko žymę parodyti žmogui.
Mano patarimas? Viską, ką darote užpakalinėje dalyje, laikykite UTC laiko zona. Saugokite ją savo duomenų bazėje kaip UTC laiko žymę, perduokite ją per savo API UTC formatu ir atlikite visą serverio pusės logiką UTC laiko zona. Vienintelis kartas, kai turėtumėte ją konvertuoti į vietinę laiko zoną, yra priekinėje dalyje, prieš pat ją rodydami vartotojui. Ši viena praktika apsaugos jus nuo visos laiko zonų ir vasaros laiko problemų galaktikos.
Ar vis dar turėčiau nerimauti dėl 2038 metų problemos?
Daugumai naujų projektų – greičiausiai ne. „2038 metų problema" yra senesnių sistemų, kurios naudojo 32 bitų ženklinį sveikąjį skaičių, laiko žymei saugoti, palikimas. Kai tas skaičius tampa per didelis, jis persisuka ir tampa neigiamas, grąžindamas datas į 1901 metus.
Laimei, beveik visos šiuolaikinės sistemos – nuo operacinių sistemų iki duomenų bazių – seniai perėjo prie 64 bitų sveikųjų skaičių. Tai efektyviai nustumia problemą taip toli (iš tiesų, milijardus metų), kad ji nebetampa praktiniu rūpesčiu mums.
Vis dėlto, jei prižiūrite senąją sistemą arba dirbate su įterptine technine įranga (pvz., IoT įrenginiais), tai tikrai yra verta dėmesio. Visada žinokite, kokio tipo architektūroje kuriate.
Kaip greitai konvertuoti laiko žymę „Excel" arba „Google Sheets"?
Tam nereikia ištraukti duomenų į atskirą Unix laiko žymės konverterį. Paprasta formulė atliks darbą. Tarkime, jūsų laiko žymė yra langelyje A1:
- Laiko žymėms sekundėmis (10 skaitmenų):
=A1 / 86400 + DATE(1970,1,1) - Laiko žymėms milisekundėmis (13 skaitmenų):
=A1 / 86400000 + DATE(1970,1,1)
Tiesiog įrašykite šią formulę, tada suformatuokite langelį kaip „Datą" arba „Datą ir laiką". Tai išsigelbsti, kai greitai analizuojate duomenų eksportus ir nenorite sutrikdyti savo darbo eigos.
Pavargo nuolat perjunginėti tarp redaktoriaus, komandų eilutės ir tuzino naršyklės skirtukų paprastoms užduotims atlikti? ShiftShift Extensions paketas sujungia galingą Unix laiko žymės konverterį, JSON formuotoją, SQL gražintoją ir daug kitų priemonių tiesiai į jūsų naršyklę. Viskas, ko reikia, yra vos viena klavišų kombinacija.