🛠️

Whiz Tools

Build • Create • Innovate

Unix laika zīmoga uz datuma pārvēršanas rīks: 12/24 stundu formāta atbalsts

Pārvērst Unix laika zīmogus cilvēkam saprotamos datumos un laikos. Izvēlieties starp 12 stundu un 24 stundu laika formātiem ar šo vienkāršo, lietotājam draudzīgo pārvēršanas rīku.

Unix laika zīmju pārveidotājs

الطابع الزمني يونكس هو عدد الثواني منذ 1 يناير 1970 (UTC)

Pārveidotā datums un laiks

📚

Dokumentācija

Unix laika pārvēršana

Ievads

Unix laiks (pazīstams arī kā POSIX laiks vai Epoch laiks) ir sistēma, kas apraksta laika punktu. Tas ir sekunžu skaits, kas pagājis kopš 1970. gada 1. janvāra (pusstundā UTC/GMT), neiekļaujot lēciena sekundes. Unix laiki plaši tiek izmantoti datoru sistēmās un programmēšanas valodās, jo tie nodrošina kompakta, valodu neatkarīgu laika brīža attēlojumu.

Šis pārvēršanas rīks ļauj jums pārvērst Unix laiku cilvēkam lasāmā datuma un laika formātā. Tas atbalsta gan 12 stundu (AM/PM), gan 24 stundu laika formātus, lai apmierinātu dažādas reģionālās un personiskās preferences.

Kā darbojas Unix laiki

Unix laiki tiek aprēķināti kā sekunžu skaits kopš Unix Epoch (1970. gada 1. janvāra, 00:00:00 UTC). Tas padara tos īpaši noderīgus laika atšķirību aprēķināšanai un datu glabāšanai kompakta formātā.

Matemātiskā pārvēršana no Unix laika uz kalendāra datumu ietver vairākus soļus:

  1. Sākt ar Unix Epoch (1970. gada 1. janvāra, 00:00:00 UTC)
  2. Pievienot laika zīmē esošo sekunžu skaitu
  3. Ņemt vērā lēciena gadus, mainīgus mēnešu garumus un citas kalendāra sarežģītības
  4. Ja nepieciešams, piemērot laika joslas pielāgojumus

Piemēram, Unix laiks 1609459200 attēlo piektdienu, 2021. gada 1. janvāri, 00:00:00 UTC.

Pārvēršanas formulu var izteikt kā:

Datums=Unix Epoch+Laiks (sekundeˉs)\text{Datums} = \text{Unix Epoch} + \text{Laiks (sekundēs)}

Lielākā daļa programmēšanas valodu un operētājsistēmu nodrošina iebūvētas funkcijas, lai apstrādātu šo pārvēršanu, slēpjot sarežģītās kalendāra aprēķinus.

Laika formātu opcijas

Šis pārvēršanas rīks piedāvā divas laika formāta opcijas:

  1. 24 stundu formāts (dažreiz saukts par "militāro laiku"): Stundas svārstās no 0 līdz 23, un nav AM/PM apzīmējuma. Piemēram, 15:00 tiek attēlots kā 15:00.

  2. 12 stundu formāts: Stundas svārstās no 1 līdz 12, ar AM (ante meridiem) laikiem no pusnakts līdz pusdienlaikam un PM (post meridiem) laikiem no pusdienlaika līdz pusnaktij. Piemēram, 15:00 24 stundu formātā tiek attēlots kā 3:00 PM.

Izvēle starp šiem formātiem galvenokārt ir reģionāla konvencija un personiska preference:

  • 24 stundu formāts ir plaši izmantots lielākajā daļā Eiropas, Latīņamerikas un Āzijas, kā arī zinātniskos, militāros un medicīnas kontekstos visā pasaulē.
  • 12 stundu formāts ir izplatīts Amerikas Savienotajās Valstīs, Kanādā, Austrālijā un dažās citās angliski runājošās valstīs ikdienas lietošanai.

Malu gadījumi un ierobežojumi

Strādājot ar Unix laikiem, ir svarīgi būt uzmanīgam pret vairākiem malu gadījumiem un ierobežojumiem:

  1. Negatīvi laiki: Šie attēlo datumus pirms Unix Epoch (1970. gada 1. janvāra). Lai gan matemātiski tie ir derīgi, dažas sistēmas var nepareizi apstrādāt negatīvus laikus.

  2. 2038. gada problēma: Unix laiki bieži tiek glabāti kā 32 bitu parakstīti veseli skaitļi, kas pārsniegs 19. janvāra 2038. gadu. Pēc šī brīža 32 bitu sistēmas nespēs pareizi attēlot laikus, ja vien tās netiks modificētas, lai izmantotu lielāku veselu skaitļu tipu.

  3. Ļoti lieli laiki: Ļoti tālu nākotnes datumi var nebūt attēlojami dažās sistēmās vai var tikt apstrādāti nesakritīgi.

  4. Lēciena sekundes: Unix laiks neņem vērā lēciena sekundes, kas reizēm tiek pievienotas UTC, lai kompensētu Zemes neregulāro rotāciju. Tas nozīmē, ka Unix laiks nav precīzi sinhronizēts ar astronomisko laiku.

  5. Laika joslas apsvērumi: Unix laiki attēlo mirkļus UTC. Pārvēršana uz vietējo laiku prasa papildu laika joslas informāciju.

  6. Vasaras laiks: Pārvēršot laikus uz vietējo laiku, jāņem vērā Vasaras laika pārejas sarežģītības.

Lietošanas gadījumi

Unix laiki tiek izmantoti daudzās lietojumprogrammās datoru un datu pārvaldībā:

  1. Datu bāzes ieraksti: Laiki parasti tiek izmantoti, lai reģistrētu, kad ieraksti tika izveidoti vai mainīti.

  2. Tīmekļa izstrāde: HTTP galvenes, sīkfaili un kešatmiņas mehānismi bieži izmanto Unix laikus.

  3. Žurnālu faili: Sistēmas žurnāli parasti reģistrē notikumus ar Unix laikiem precīzai hronoloģiskai secībai.

  4. Versiju kontroles sistēmas: Git un citas VCS izmanto laikus, lai reģistrētu, kad tika veikti komitejas.

  5. API atbildes: Daudzi tīmekļa API iekļauj laikus savās atbildēs, lai norādītu, kad dati tika ģenerēti vai kad resursi tika pēdējo reizi modificēti.

  6. Failu sistēmas: Failu izveides un modificēšanas laiki bieži tiek glabāti kā Unix laiki.

  7. Sesiju pārvaldība: Tīmekļa lietojumprogrammas izmanto laikus, lai noteiktu, kad lietotāja sesijas jābeidz.

  8. Datu analīze: Laiki nodrošina standartizētu veidu, kā strādāt ar laika datiem analītikas lietojumprogrammās.

Alternatīvas

Lai gan Unix laiki ir plaši izmantoti, ir alternatīvi laika attēlojuma formāti, kas var būt piemērotāki noteiktos kontekstos:

  1. ISO 8601: Standartizēts virknes formāts (piemēram, "2021-01-01T00:00:00Z"), kas ir cilvēkam lasāms, saglabājot kārtību. Tas bieži tiek izvēlēts datu apmaiņai un lietotāja saskarnēm.

  2. RFC 3339: ISO 8601 profils, ko izmanto interneta protokolos, ar stingrākām formatēšanas prasībām.

  3. Cilvēkam lasāmi formāti: Lokalizēti datuma virknējumi (piemēram, "2021. gada 1. janvāris") ir piemērotāki tiešai lietotāju mijiedarbībai, bet ir mazāk piemēroti aprēķiniem.

  4. Microsoft FILETIME: 64 bitu vērtība, kas attēlo 100 nanosekundi intervālus kopš 1601. gada 1. janvāra, ko izmanto Windows sistēmās.

  5. Jūlija dienas numurs: Izmanto astronomijā un dažās zinātniskās lietojumprogrammās, skaitot dienas kopš 4713. gada p.m.ē. 1. janvāra.

Laika formāta izvēle ir atkarīga no tādiem faktoriem kā:

  • Nepieciešamā precizitāte
  • Cilvēku lasāmības vajadzības
  • Glabāšanas ierobežojumi
  • Saderība ar esošajām sistēmām
  • Datumu diapazons, kas jāattēlo

Vēsture

Unix laika koncepts radās, izstrādājot Unix operētājsistēmu Bell Labs 1960. gadu beigās un 1970. gadu sākumā. Lēmums izmantot 1970. gada 1. janvāri kā epoch bija nedaudz patvaļīgs, bet praktisks tajā laikā - tas bija pietiekami nesens, lai samazinātu datu glabāšanas prasības interesējošiem datumiem, bet pietiekami tālu pagātnē, lai būtu noderīgs vēsturiskajiem datiem.

Sākotnējā īstenošana izmantoja 32 bitu parakstītu veselu skaitli, lai glabātu sekunžu skaitu, kas bija pietiekams gaidāmajam Unix sistēmu mūža ilgumam tajā laikā. Tomēr šis lēmums noveda pie 2038. gada problēmas (dažreiz sauktas par "Y2K38" vai "Unix milēnija kļūda"), jo 32 bitu parakstīti veseli skaitļi var attēlot laikus tikai līdz 1970. gada 1. janvāra 19. janvārim (03:14:07 UTC).

Kad Unix un Unix līdzīgas operētājsistēmas ieguva popularitāti, Unix laiks kļuva par de facto standartu laika attēlošanai datoru jomā. To pieņēma daudzas programmēšanas valodas, datu bāzes un lietojumprogrammas, paplašinot tā pielietojumu tālu ārpus sākotnējās Unix vides.

Mūsdienu sistēmas arvien biežāk izmanto 64 bitu veselos skaitļus laikiem, kas paplašina attēlojamā diapazona robežas līdz aptuveni 292 miljardiem gadu abos virzienos no epoch, efektīvi atrisinot 2038. gada problēmu. Tomēr mantojuma sistēmas un lietojumprogrammas var joprojām būt neaizsargātas.

Unix laika vienkāršība un lietderība ir nodrošinājusi tā turpmāku nozīmīgumu, neskatoties uz sarežģītāku laika attēlojuma formātu izstrādi. Tas joprojām ir pamatjēdziens datorzinātnēs, kas veido pamatu lielākajai daļai mūsu digitālās infrastruktūras.

Koda piemēri

Šeit ir piemēri, kā pārvērst Unix laikus cilvēkam lasāmā datumā dažādās programmēšanas valodās:

1// JavaScript laika pārvēršana
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3  // Izveido jaunu Date objektu (JavaScript izmanto milisekundes)
4  const date = new Date(timestamp * 1000);
5  
6  // Formatēšanas opcijas
7  const options = {
8    year: 'numeric',
9    month: 'long',
10    day: 'numeric',
11    weekday: 'long',
12    hour: use12Hour ? 'numeric' : '2-digit',
13    minute: '2-digit',
14    second: '2-digit',
15    hour12: use12Hour
16  };
17  
18  // Pārvērš uz virkni, izmantojot lokalizētu formatēšanu
19  return date.toLocaleString(undefined, options);
20}
21
22// Piemēra izmantošana
23const timestamp = 1609459200; // 2021. gada 1. janvāris 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // 24 stundu formāts
25console.log(convertUnixTimestamp(timestamp, true));  // 12 stundu formāts
26

Malu gadījumu apstrāde

Strādājot ar Unix laikiem, ir svarīgi pareizi apstrādāt malu gadījumus. Šeit ir piemēri, kā apstrādāt dažus kopīgus malu gadījumus:

1// JavaScript malu gadījumu apstrāde
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3  // Pārbauda, vai laiks ir derīgs
4  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5    return "Nederīgs laiks";
6  }
7  
8  // Pārbauda negatīvus laikus (datumus pirms 1970)
9  if (timestamp < 0) {
10    // Dažas pārlūkprogrammas var nepareizi apstrādāt negatīvus laikus
11    // Izmanto robustāku pieeju datumiem pirms 1970
12    const date = new Date(timestamp * 1000);
13    if (isNaN(date.getTime())) {
14      return "Nederīgs datums (pirms 1970)";
15    }
16  }
17  
18  // Pārbauda Y2K38 problēmu (32 bitu sistēmām)
19  const maxInt32 = 2147483647; // Maksimālā vērtība 32 bitu parakstītam veselam skaitlim
20  if (timestamp > maxInt32) {
21    // Apsver iespēju izmantot BigInt ļoti lieliem laikiem modernajā JavaScript
22    console.warn("Laiks pārsniedz 32 bitu veselā skaitļa robežu (Y2K38 problēma)");
23  }
24  
25  // Turpina ar parasto pārvēršanu
26  try {
27    const date = new Date(timestamp * 1000);
28    const options = {
29      year: 'numeric',
30      month: 'long',
31      day: 'numeric',
32      weekday: 'long',
33      hour: use12Hour ? 'numeric' : '2-digit',
34      minute: '2-digit',
35      second: '2-digit',
36      hour12: use12Hour
37    };
38    return date.toLocaleString(undefined, options);
39  } catch (error) {
40    return "Kļūda, pārvēršot laiku: " + error.message;
41  }
42}
43

Atsauces

  1. "Unix laiks." Vikipēdija, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time

  2. "2038. gada problēma." Vikipēdija, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem

  3. Olson, Arthur David. "Kalendāra laika sarežģītības." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf

  4. "ISO 8601." Vikipēdija, Wikimedia Foundation, https://en.wikipedia.org/wiki/ISO_8601

  5. "RFC 3339: Datums un laiks internetā: Laiki." Interneta inženierijas darba grupa (IETF), https://tools.ietf.org/html/rfc3339

  6. Kernighan, Brian W., un Dennis M. Ritchie. "C programmēšanas valoda." Prentice Hall, 1988.