Kigeuzi cha Unix timestamp kwenda tarehe

Badilisha Unix timestamp kuwa tarehe na saa inayoeleweka — au tarehe yoyote kurudi kuwa Unix timestamp. Inaunga mkono sekunde na milisekunde.

Sambaza zana hii

Weka kwenye tovuti yako

Unix timestamp ni nini?

Unix timestamp, inayoitwa pia Unix time au POSIX time, ni idadi ya sekunde zilizopita tangu 1970-01-01 00:00:00 UTC, inayojulikana kama Unix epoch. Ni kiwango kikubwa kinachotumika katika kompyuta kwa sababu inawakilisha wakati mahususi kama nambari moja tu, ambayo inatajifanya kuona, kulinganisha, na kunia hesabu kuwa rahisi.

JavaScript inafanya kazi ndani katika millisekunde, kwa hivyo Date.now() inarudisha Unix timestamp ikiongezwa kwa 1000. API nyingi, hifadhidata, na mifumo ya backend hutumia sekunde badala yake. Zana hii inakubali muundo wowote na kubaini sekunde au millisekunde kwa otomatiki kulingana na ukubwa wa nambari unaoingia.

Unix timestamps zinazokumbukwa

TimestampTarehe (UTC)Muhtasari
01970-01-01 00:00:00Unix epoch
1,000,000,0002001-09-09 01:46:40Bilioni 1 ya sekunde
2,000,000,0002033-05-18 03:33:20Bilioni 2 ya sekunde
2,147,483,6472038-01-19 03:14:07Tatizo la 2038 (kiwango cha juu cha bits 32)

Kwa nini 1970?

Unix epoch ya Januari 1, 1970 ilichaguliwa kwa sehemu na mgogoro na kwa sehemu na vizuizi vya vitendo. Unix ilitengenezwa mwishoni mwa miaka ya 1960 na mwanzo wa miaka ya 1970 katika Bell Labs. Waendelezaji walihitaji tarehe ya kuanzia iliyokaribia na round kwa ajili ya kuwakilisha wakati wao. Januari 1, 1970 ilikuwa karibu kutosha kuwa na matumizi ya vitendo na haikuwa na umuhimu maalum wa kiufundi — ilikuwa tu mahali salama.

Tarehe za epoch mbadala zipo katika mifumo mingine: Windows FILETIME epoch ni Januari 1, 1601; wakati wa GPS ulianza Januari 6, 1980; NTP epoch ni Januari 1, 1900. Wakati wa kubadilisha kati ya mifumo, kujua epoch ya kila mfumo ni muhimu.

Sekunde dhidi ya millisekunde

Unix timestamp ya asili ni katika sekunde. Lugha nyingi upande wa server na mifumo (Unix shell, Python's time.time(), PHP's time(), hifadhidata nyingi) hutumia sekunde. JavaScript's Date.now() na new Date().getTime() hurejesha millisekunde. Tofauti hii ndio chanzo kikubwa cha hitilafu wakati JavaScript frontends zinarongeza na backend APIs.

Unix timestamp katika sekunde sasa ni nambari ya tarakamu 10 (karibu 1,700,000,000 kuanzia 2023). Timestamp ya millisekunde ni nambari ya tarakamu 13. Kikokotoo kinabaini muundo unaoingizwa kulingana na idadi ya tarakamu na kuibadilisha ipasavyo.

Tatizo la mwaka 2038

Mifumo inayohifadhi Unix timestamps kama nambari iliyotiwa saini ya bits 32 inaweza kuwakilisha tarehe tu hadi 2,147,483,647 sekunde baada ya epoch — ambayo ni 03:14:07 UTC siku ya Januari 19, 2038. Baada ya wakati huo, nambari iliyotiwa saini ya bits 32 inasikiliza, na kuwakilisha tarehe katika 1901.

Hii inaitwa wakati mwingine "Y2K38" problem au Unix Millennium Bug. Mifumo ya bits 64 ya sasa haisikia, kwa sababu nambari iliyotiwa saini ya bits 64 inaweza kuwakilisha timestamps kwa takribani miaka 292 bilioni. Hata hivyo, mifumo iliyoingizwa, hifadhidata za zamani, na programu za bits 32 za zamani zinaweza kuwa hatarini. Tasnia nyingi — ikiwa ni pamoja na mawasiliano, benki, na mifumo ya kudhibiti viwanda — ina juhudi zinazoendelea za kuhamia kusuluhisha hili.

Jinsi ya kupata Unix timestamp ya sasa

Lugha / mazingiraAmri
JavaScriptMath.floor(Date.now() / 1000)
Pythonimport time; int(time.time())
PHPtime()
Bashdate +%s
SQL (PostgreSQL)EXTRACT(EPOCH FROM NOW())::int
SQL (MySQL)UNIX_TIMESTAMP()
Gotime.Now().Unix()
RustSystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs()

Matumizi ya vitendo

Maendeleo ya API: REST APIs kawaida hutumia Unix timestamps kwa ajili ya created_at, updated_at, na token expiry fields. Timestamp haina kuzingatiwa kwa timezone na haina utata — tofauti na minyunyuzo ya tarehe iliyoandaliwa, ambayo inategemea mahali pa kituo na mfumo wa kuandaa.

Token expiry: JWT (JSON Web Tokens) inatumia Unix timestamps kwa ajili ya exp (expiry) na iat (issued at) claims. Token inaisha wakati timestamp ya sasa inazidi thamani ya exp. Kuhesabu muda wa kuishia — "token hii inapaswa kuishia saa 24" — inahitaji kuongeza sekunde 86,400 kwa timestamp ya sasa.

Cache TTL: Cache expiry kawaida inawekwa kama Unix timestamp au kama idadi ya sekunde kutoka sasa. Kubaini matatizo ya cache mara nyingi inahitaji kubadilisha timestamp ya expiry iliyohifadhiwa kuwa tarehe inayosomeka.

Uchambuzi wa kumbukumbu: Kumbukumbu za server mara nyingi zina Unix timestamps. Kuibadilisha kuwa tarehe inayosomeka ni hatua ya kwanza katika kuunganisha entries za kumbukumbu na matukio halisi.

Hifadhidata: Kuweka timestamps kama nambari badala ya minyunyuzo iliyoandaliwa inazuia hitilafu za ubadilishaji wa timezone na kurahisisha kupanga, kupashia mahitaji, na hesabu. Ombi la "rekodi zote za siku 7 zilizopita" inakuwa WHERE created_at > (NOW_UNIX - 604800).

Maswali yanayoulizwa mara kwa mara

Unix timestamp ni nini?

Unix timestamp ni idadi ya sekunde zilizopita tangu Januari 1, 1970, 00:00:00 UTC — rejea inayoitwa Unix epoch. Inawakilisha muda wowote kama namba kamili moja, jambo linalorahisisha kuhifadhi, kulinganisha, na kufanya hesabu. Huu ni muundo wa muda wa kawaida unaotumika kwenye mifumo mingi ya uendeshaji, hifadhidata, API, na lugha za programu.

Ninawezaje kubadilisha Unix timestamp kuwa tarehe?

Weka timestamp kwenye kigeuzi na kitakurudishia tarehe na muda unaolingana kwa UTC na kwa eneo lako la saa. Zana hutambua kiotomatiki kama umeweka sekunde (namba ya tarakimu 10) au milisekunde (namba ya tarakimu 13). Unaweza pia kubadilisha kinyume chake: chagua tarehe na muda ili kupata Unix timestamp inayolingana.

Tofauti ni nini kati ya Unix time ya sekunde na ya milisekunde?

Unix timestamp ya asili iko kwenye sekunde. Mifumo mingi ya upande wa seva — PHP, Python, Go, Bash, hifadhidata za SQL — hutumia sekunde. Date.now() na new Date().getTime() za JavaScript hurudisha milisekunde (sekunde za Unix × 1000). Timestamp ya sekunde kwa sasa huwa na tarakimu 10; ya milisekunde huwa na tarakimu 13. Kuchanganya hizo mbili ni kosa la kawaida wakati frontend ya JavaScript inapotuma timestamp kwa backend inayotarajia sekunde.

Kwa nini Unix time huanza Januari 1, 1970?

Tarehe hiyo ilichaguliwa na watengenezaji wa Unix katika Bell Labs mwanzoni mwa miaka ya 1970 kama tarehe ya kuanzia iliyo rahisi na ya hivi karibuni. Haina maana maalum zaidi ya kuwa tarehe “ya mviringo” iliyo karibu na kipindi ambacho mfumo uliandaliwa. Mifumo mingine hutumia epochs tofauti: Windows FILETIME huanza Januari 1, 1601; GPS time huanza Januari 6, 1980; NTP huanza Januari 1, 1900.

Tatizo la Year 2038 ni nini?

Mifumo inayohifadhi Unix timestamps kama signed 32-bit integer inaweza kuwakilisha tarehe hadi Januari 19, 2038 (timestamp 2,147,483,647). Baada ya hapo, thamani hulipuka (overflow) na kuwa namba hasi kubwa, ikiwakilisha tarehe ya mwaka 1901. Mifumo ya kisasa ya 64-bit haiathiriki. Hata hivyo, mifumo ya zamani iliyo embedded, hifadhidata za zamani, na programu za 32-bit bado zinaweza kuwa hatarini na zinahitaji uhamisho kabla ya tarehe hiyo.

Ninawezaje kupata Unix timestamp ya sasa kwenye lugha yangu ya programu?

JavaScript: Math.floor(Date.now() / 1000). Python: import time; int(time.time()). PHP: time(). Bash: date +%s. PostgreSQL: EXTRACT(EPOCH FROM NOW())::int. MySQL: UNIX_TIMESTAMP(). Go: time.Now().Unix(). Hivi vyote hurudisha muda wa sasa kama sekunde tangu Unix epoch.