Unix Epoch).

Бүхэл тоон дүрслэл

Өдөр бүр Unix-ийн цагийг илэрхийлэх тоог UTC (00:00:00Z)-д тайлбарласны дагуу тооцдог бөгөөд шөнө дундаас эхлэн секундэд яг 1-ээр нэмэгддэг. Иймд 2004 оны 09-р сарын 16-ны 17:55:43.54, шөнө дундаас хойшхи 64543.54 секундийг дээрх жишээнээс UNIX цаг дээр 1095292800 + 64543.54 = 1095357343.54 тоогоор илэрхийлнэ. Тооцоолол эхлэхээс өмнөх огнооны хувьд тоо нь бас нэмэгддэг, өөрөөр хэлбэл. цаг хугацааны явцад тэг рүү ойртдог.

Ашигласан бүхэл тоон систем нь огноог харьцуулах, хадгалахад ашиглахад тохиромжтой (энэ форматын огноо, цаг нь ердөө 4 эсвэл 8 байт). Хэрэв та огнооны элементүүдэд (өдөр, сар, жил) хандах шаардлагатай бол секундийг ямар ч тохиромжтой формат руу хөрвүүлж болно (мөн эсрэгээр).

Програмууд нь UNIX цагийг хадгалахын тулд тэмдэгт бүхэл тооны төрлийг ашигладаг. Гарын үсэг зурсан 32 бит тоонууд нь 1901 оны 12-р сарын 13-ны Баасан гарагаас 20:45:52-аас 2038 оны 1-р сарын 19-ний Мягмар гарагийн 03:14:07 хүртэлх цагийг зааж өгч болно.

Ихэнх UNIX-тэй төстэй системүүдийн одоогийн UNIX цагийг мэдэхийн тулд та date +%s командыг ашиглаж болно.

"Ой өдөр" гэсэн утгатай

Цаг хугацаа Секундын тоо
1901 оны 12-р сарын 13, 20:45:52 UTC

Гарын үсэг зурсан 32 битийн хамгийн бага огноо (0x80000000)

2038 оны нэгдүгээр сарын 19, 03:14:07 UTC

Гарын үсэг зурсан 32-бит дүрслэл дэх хамгийн их огноо (0x7FFFFFFFF)

2001 оны 9-р сарын 01:46:40 UTC 1,000,000,000 (1 гигасекунд)
2004 оны нэгдүгээр сарын 10, 13:37:04 UTC 1 073 741 824 = 2 30 (1 кисесекунд)
Гуравдугаар сарын 18, 2005 01:58:31 UTC 1 111 111 111
Есдүгээр сарын 6, 2008 12:12:05 UTC 1 220 703 125 = 5 13
2009 оны 2-р сарын 13, 23:31:30 UTC 1 234 567 890

2038 оны асуудал

UNIX систем болох Apple iOS-ийн асуудал

Apple-ийн 64 битийн iOS төхөөрөмжүүдэд асуудал байна: UNIX системүүд. Хэрэв та iOS үйлдлийн системтэй 64 битийн процессортой төхөөрөмж дээрх цагийг 1970 оны 1-р сарын 1-ний өглөөний нэг цаг болгож, UTC +1:30 ба түүнээс дээш цагийн бүсэд байгаа төхөөрөмжийг дахин ачаалвал дараа нь төхөөрөмжийг дахин ачаалахад энэ нь асахгүй, "цагаан алим" үргэлж асна. Энэ нь цагийн бүсийн зөрүүгээс шалтгаална, өөрөөр хэлбэл: хэрэв та 1970 оны 1-р сарын 1-ний UTC +1:30 цагийн бүсэд цагийг 1:00 болгон тохируулсан бол UNIX цагийн тоолуур хасах руу орно. үүнийг систем ойлгох боломжгүй UTC цагаас эхлэн тоолдог бөгөөд үүний үр дүнд тоолуур хөлддөг. Төхөөрөмж нь DFU-ээр ч сэргэдэггүй, гэхдээ асуудал нь өөр аргаар гурван шийдэлтэй байдаг. Эхний арга: зүгээр л төхөөрөмжийг асаалттай орхиод UNIX цагийн тоолуур эерэг болох хүртэл хүлээнэ үү (энэ нь хараахан нотлогдоогүй байна. энэ аргаажилладаг). Хоёрдахь арга: Утасны батарей бүрэн дуусч, тоолуур өөрийгөө тэг болгох хүртэл хүлээнэ үү. Гурав дахь арга: төхөөрөмжийг задалж, зайгаа хэсэг хугацаанд салгасны дараа төхөөрөмжийг дахин угсарч, тоолуур мөн тэг болж, төхөөрөмж ажиллах болно.

Асуудлыг iOS 9.3.1-д эцэслэн шийдсэн - 2001 оны 1-р сарын 1-ээс эхлэн огноог төхөөрөмж дээр ашиглах боломжтой болсон.

Програм хангамжийн хөрвүүлэлт

UNIX цаг болон өдрийн огноо, цаг хэлбэрээр ердийн дүрслэлийн хооронд хөрвүүлэх функцийг Си хэл дээр хэрэгжүүлэх жишээг өгөв. Жишээ нь стандарт гарын үсэг бүхий 32 бит форматаар харагдаж байна. Гэсэн хэдий ч, хэрэв та _XT_SIGNED тодорхойлолтыг тайлбарлавал, жишээ нь гарын үсэг зураагүй хувилбарт бий болно.

Цагийн хөрвүүлэлт, толгой файл

typedef гарын үсэггүй богино u16_t; typedef unsigned long u32_t; typedef гарын үсэгтэй богино s16_t; typedef гарын үсэг зурсан урт s32_t;

// DEF: стандарт гарын үсэгтэй формат // UNDEF: стандарт бус тэмдэггүй формат #define _XT_SIGNED #ifdef _XT_SIGNED typedef s32_t xtime_t; #else typedef u32_t xtime_t; #endif struct tm ( /* огноо ба цагийн бүрэлдэхүүн хэсгүүд */ BYTE tm_sec; BYTE tm_sec; BYTE tm_min; BYTE tm_hour; BYTE tm_mday; BYTE tm_mon; u16_t tm_year; ); хүчингүй xtotm(бүтэц tm *t, xtime_t сек); xtime_t xtmtot(бүтэц tm *t);

#include "xtime.h" #define _TBIAS_DAYS ((70 * (u32_t)365) + 17) #define _TBIAS_SECS (_TBIAS_DAYS * (xtime_t)86400) #define _TBIAS_YEAR (1900) (1900 он)(ABde) 03) || ((жил) == 0)) ? mos: lmos) const s16_t lmos = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335); const s16_t mos = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334); #define Daysto32(жил, сар) (((жил - 1) / 4) + MONTAB(жил)) //////////////////////// //////////////////////////////////////// xtime_t xtmtot(struct tm *t ) ( /* цагийн бүтцийг скаляр цаг руу хөрвүүлэх */ s32_t хоног; xtime_t сек; s32_t mon, жил; /* өдрийн тоог тооцоол. */ mon = t->tm_mon - 1; жил = t->tm_year - _TBIAS_YEAR; хоног = Daysto32(year, mon) - 1 days += tm_mday -= _TBIAS_DAYS */ secs = += 60 * tm_sc-; tm_sec += (өдөр * (xtime_t) 86400 буцах (сек) /////////////////////////; //////////////// //// void xttotm(struct tm *t, xtime_t secsarg) ( u32_t secs; s32_t days; s32_t mon; s32_t year; s32_t i; const s16_t* pm; #ifdef _XT_SIGNED if (secsarg >= 0) ( secs = ( u32_t)secsarg; days = _TBIAS_DAYS; ) else ( scs = (u32_t)secsarg + _TBIAS_SECS; days = 0; ) =ASC_sec =сек/86400; сек = сек % 86400;< (i = Daysto32(year, 0) + 365*year);) { --year; } days -= i; t->t->tm_hour = сек / 3600; сек %= 3600;< pm[--mon];); t->t->tm_min = сек / 60; t->tm_sec = сек % 60;

/* оныг тодорхойлох */ (жил = хоног / 365; хоног

tm_year = жил + _TBIAS_YEAR; /* сар тодорхойлох */ pm = MONTAB(жил);хувьд (дав = 12; хоног

tm_mon = mon + 1;

t->tm_mday = өдрүүд - pm + 1; )

Цагийг Excel-ээс Unix формат руу хөрвүүлэх

давхар et; // огноо, цаг

Чернышев нэгдүгээр өрөөний цонхны дэргэд Францын романы номтой сууж байв. Энэ өрөө магадгүй өмнө нь танхим байсан; дотор нь хэдэн хивс овоолсон эрхтэн байсан бөгөөд нэг буланд адъютант Беннигсений эвхдэг ор байв. Энэ туслах энд байсан. Баяр ёслол, ажил хэрэг гээд ядарч туйлдсан бололтой эргэлдсэн орон дээр суугаад нойрмоглов. Хонгилоос хоёр хаалга гарч ирэв: нэг нь шууд хуучин зочны өрөө рүү, нөгөө нь баруун тийшээ оффис руу. Эхний хаалганаас герман хэлээр, хааяа францаар ярих дуу хоолой сонсогдов. Тэнд, хуучин зочны өрөөнд тусгаар тогтнолын хүсэлтээр цэргийн зөвлөл цугларсангүй (тус эрхт улс тодорхойгүй байдалд дуртай байсан), харин удахгүй болох бэрхшээлүүдийн талаархи санал бодлыг нь мэдэхийг хүссэн зарим хүмүүс цугларчээ. Энэ бол цэргийн зөвлөл биш, харин тусгаар тогтнолын төлөө биечлэн тодорхой асуудлыг тодруулахаар сонгогдсон хүмүүсийн зөвлөл байсан юм. Энэхүү хагас зөвлөлд уригдсан хүмүүс нь: Шведийн генерал Армфельд, адъютант генерал Вольцоген, Наполеоныг оргож францын харьяат гэж нэрлэсэн Винцингероде, Мишо, Тол, огт цэргийн хүн биш, Гүн Штайн, эцэст нь Пфюэл өөрөө. Хунтайж Андрей сонсов, энэ бүх асуудлын үндэс нь la cheville ouvriere байсан юм. Пфухль түүний араас удалгүй ирж, зочны өрөөнд орж, Чернышевтэй нэг минут зогссон тул хунтайж Андрейд түүнийг сайн харах боломж олдсон юм.
Хувцасны өмсгөлтэй мэт эвгүйхэн суусан орос жанжны дүрэмт хувцсаа тааруухан оёсон Пфуль анх харахад хунтайж Андрейд танил санагдсан ч түүнийг хэзээ ч харж байгаагүй юм. Үүнд Вейротер, Мак, Шмидт болон хунтайж Андрей 1805 онд уулзаж чадсан Германы бусад олон онолын генералууд багтсан; гэхдээ тэр бүгдээс илүү жирийн нэгэн байсан. Ханхүү Андрей эдгээр германчуудад байдаг бүх зүйлийг өөртөө нэгтгэсэн Германы онолчийг хэзээ ч харж байгаагүй.
Пфуэл богинохон, маш туранхай, гэхдээ өргөн ястай, барзгар, эрүүл биетэй, өргөн аарцагтай, ястай мөртэй байв. Түүний царай маш үрчлээстэй, гүн гүнзгий нүдтэй байв. Түүний урд талын үсийг сүмийнх нь ойролцоо, сойзоор яаран гөлгөр болгож, ар талдаа гогцоотой гэнэн байдлаар наасан байв. Тэрээр тайван бус, ууртай эргэн тойрноо харан өөрийн орсон том өрөөнд байгаа бүх зүйлээс айсан мэт өрөөнд оров. Тэр сэлмээ эвгүй хөдөлгөөнөөр бариад Чернышев руу эргэж, хаан хаана байгааг германаар асуув. Өрөөнүүдийг аль болох хурдан гүйж, бөхийж, мэндчилгээгээ дуусгаад газрын зургийн өмнө суугаад гэртээ байгаа юм шиг санагдсан бололтой. Тэр Чернышевын үгэнд яаран толгой дохин, Пфуэлийн өөрийн онолын дагуу тусгаар тогтносон бэхлэлтийг шалгаж байна гэсэн түүний үгийг сонсоод ёжтой инээмсэглэв. Тэр өөртөө итгэлтэй германчуудын хэлдгээр ямар нэг юм ярив: Dummkopf... эсвэл: zu Grunde die ganze Geschichte... эсвэл: s"wird was gescheites d"raus werden... [утгагүй зүйл... тэр чигээрээ там руу ... (Герман) ] хунтайж Андрей сонсоогүй бөгөөд өнгөрөхийг хүссэн боловч Чернышев хунтайж Андрейг Пфулд танилцуулж, хунтайж Андрей дайн маш аз жаргалтай байсан Туркээс ирсэн гэдгийг тэмдэглэв. Пфул хунтайж Андрей рүү нэг их биш түүн рүү харан инээгээд: "Да muss ein schoner taktischcr Krieg gewesen sein" гэж инээвхийлэв. ["Энэ бол зөв тактикийн дайн байсан байх." (Герман)] - Тэгээд үл тоомсорлон инээж, дуу хоолой сонсогдсон өрөөнд оров.
Тэд түүнгүйгээр түүний хуаранг шалгаж, түүнийг шүүхээр зориглосон нь инээдэмтэй уур хилэнд үргэлж бэлэн байдаг Пфуль одоо маш их баярласан бололтой. Хунтайж Андрей Пфуэльтэй хийсэн энэ богино уулзалтаас Аустерлицын дурсамжийн ачаар энэ хүний ​​​​тодорхой тайлбарыг эмхэтгэсэн. Пфуэл бол зөвхөн германчууд л байж болох найдваргүй, үргэлж өөртөө итгэлтэй хүмүүсийн нэг байсан бөгөөд зөвхөн Германчууд л хийсвэр санаа - шинжлэх ухаан, өөрөөр хэлбэл хийсвэр мэдлэг дээр үндэслэн өөртөө итгэлтэй байдаг. төгс үнэний тухай. Франц хүн өөртөө итгэлтэй байдаг, учир нь тэрээр өөрийгөө оюун ухаан, бие махбодийн хувьд эрэгтэй, эмэгтэй хүмүүсийн аль алинд нь үл тоомсорлодог гэж үздэг. Англи хүн өөрийгөө дэлхийн хамгийн тохь тухтай улсын иргэн гэдэг үндэслэлээр өөртөө итгэлтэй байдаг тул англи хүний ​​хувьд юу хийх ёстойгоо үргэлж мэддэг бөгөөд англи хүний ​​хувьд хийж байгаа бүхэн нь эргэлзээгүй гэдгийг мэддэг. сайн. Итали хүн догдолж, өөрийгөө болон бусдыг амархан мартдаг учраас өөртөө итгэлтэй байдаг. Орос хүн юу ч мэдэхгүй, мэдэхийг ч хүсдэггүй, юуг ч бүрэн мэдэх боломжтой гэдэгт итгэдэггүй учраас өөртөө итгэлтэй байдаг. Герман хүн бүхнээс өөртөө итгэлгүй, хамгийн тууштай, хамгийн зэвүүн нь юм, учир нь тэрээр үнэнийг мэддэг гэж төсөөлдөг, өөрийн зохиосон шинжлэх ухаан, гэхдээ түүний хувьд энэ нь туйлын үнэн юм. Энэ бол Пфуэл байсан нь ойлгомжтой. Түүнд Их Фредерикийн дайны түүх, түүнд тохиолдсон бүх зүйлээс олж авсан хэлбэрийн хөдөлгөөний онол гэсэн шинжлэх ухаан байсан. орчин үеийн түүхАгуу Фредерикийн дайнууд, түүний орчин үеийн цэргийн түүхэнд тохиолдсон бүх зүйл түүнд утгагүй зүйл, зэрлэг байдал, муухай мөргөлдөөн мэт санагдаж, хоёр талдаа маш олон алдаа гаргасан тул эдгээр дайныг дайн гэж нэрлэхийн аргагүй байв: тэдгээр нь дайн гэж нэрлэгдэх боломжгүй байв. онолын хувьд шинжлэх ухааны сэдэв болж чадаагүй.
1806 онд Пфухл бол Йена, Ауерстатт нартай дуусгавар болсон дайны төлөвлөгөөг боловсруулагчдын нэг байсан; гэхдээ энэ дайны үр дүнд тэрээр өөрийн онолын буруугийн өчүүхэн ч нотолгоог олж харсангүй. Харин ч түүний онолоос гаргасан хазайлт нь түүний үзэл баримтлалын дагуу бүхэл бүтэн бүтэлгүйтлийн цорын ганц шалтгаан байсан бөгөөд тэрээр өөрийн онцлогтой баяр баясгалантай ёжтойгоор: "Ич сагте жа, дажи ди ганзе Гэсичтэ зум Тэуфэл гээн вирд. ” [Эцэст нь би бүх зүйл тамд унана гэж хэлсэн (Герман)] Пфуэл бол онолын зорилго буюу түүнийг практикт хэрэглэхээ мартсан онолдоо маш их хайртай онолчдын нэг байсан; Онолд дуртай тэрээр бүх практикийг үзэн яддаг бөгөөд үүнийг мэдэхийг хүсдэггүй байв. Практикт онолоос хазайснаас үүдэн гарсан бүтэлгүйтэл нь түүнд онолынх нь үнэн зөвийг л нотолсон учраас тэр бүтэлгүйтсэндээ ч баярлаж байв.
Тэрээр хунтайж Андрей, Чернышев нартай жинхэнэ дайны тухай хэд хэдэн үг хэлж, бүх зүйл муу болно гэдгийг урьдаас мэдэж байгаа бөгөөд үүнд сэтгэл дундуур байдаггүй. Түүний толгойн ар талд цухуйсан сэгсгэр үс, яаран гөлгөр болсон сүм хийдүүд нь үүнийг маш тодоор баталж байв.
Тэр өөр өрөөнд ороход тэндээс түүний хоолойны шуугиан дэгдээх чимээ шууд сонсогдов.

Ханхүү Андрей Пфуэлийг нүдээрээ дагаж амжаагүй байтал Гүн Беннигсен өрөөнд яаран орж ирээд Болконский руу толгой дохиод зогсолтгүй оффис руу орж, туслах ажилтандаа зарим тушаал өгөв. Эзэн хаан түүнийг дагаж байсан бөгөөд Беннигсен ямар нэгэн зүйл бэлдэж, эзэн хаантай уулзах цаг гаргахаар яаравчлав. Чернышев, хунтайж Андрей нар үүдний танхимд гарав. Эзэн хаан ядарсан харцаар мориноосоо буув. Маркиз Паулуччи тусгаар тогтносон эзэнд ямар нэгэн зүйл хэлэв. Эзэн хаан толгойгоо зүүн тийш бөхийлгөж, Паууччигийн яриаг сэтгэл хангалуун бус харцаар сонсов. Эзэн хаан яриагаа дуусгахыг хүссэн бололтой урагш хөдөлсөн боловч улайсан, сэтгэл нь хөдөлсөн итали хүн ёс суртахуунаа мартаж, түүнийг дагаж, үргэлжлүүлэн хэлэв.
"Quant a celui qui a conseille ce camp, le camp de Drissa, [Дрисса хуаранд зөвлөгөө өгсөн хүний ​​хувьд" гэж Паулуччи хэлээд, тусгаар тогтносон хүн шатаар орж, хунтайж Андрейг анзаарч, танил бус царай руу харав.

Unix цаг эсвэл Юникс эрин гэж юу вэ (Unix epoch эсвэл Unix time эсвэл POSIX time эсвэл Unix timetamp)?

UNIX цаг буюу POSIX цаг нь UNIX болон бусад POSIX-тэй нийцтэй үйлдлийн системд хэрэглэгдэх цаг кодлох арга юм.
Эхлэх цэг нь 1969 оны 12-р сарын 31-ээс 1970 оны 1-р сарын 1 хүртэлх шөнө дунд (UTC) гэж тооцогддог бөгөөд энэ мөчөөс эхлэн "UNIX эрин" (Англи Unix Epoch) гэж нэрлэдэг.
UNIX-ийн цаг нь UTC-тэй нийцдэг, ялангуяа UTC үсрэлт секундийг зарлахад харгалзах хоёр дахь тоо давтагдана.
Хэдэн секундын хэлбэрээр цагийг хадгалах арга нь огноог (хоёр дахь нь нарийвчлалтай) харьцуулах, мөн огноог хадгалахад ашиглахад маш тохиромжтой: шаардлагатай бол тэдгээрийг хүн унших боломжтой ямар ч формат руу хөрвүүлж болно. Энэ форматын огноо, цаг нь маш бага зай эзэлдэг (машины үгийн хэмжээнээс хамаарч 4 эсвэл 8 байт) тул их хэмжээний огноог хадгалахад ашиглах нь зүйтэй юм. Сарын тоо гэх мэт огнооны элементүүдэд маш олон удаа хандах үед гүйцэтгэлийн сул тал гарч болзошгүй боловч ихэнх тохиолдолд цагийг талбаруудын цуглуулгаас илүүтэйгээр нэг утгаар хадгалах нь илүү үр дүнтэй байдаг.

Unix эрин үеийг хүн унших боломжтой огноо болгон хөрвүүлэх


Unix-ийн эхлэл, дуусах огноо, сар, өдөр


Секундыг өдөр, цаг, минут болгон хөрвүүлэх


Юникс цагийг яаж авах вэ...

Перлцаг
PHPцаг ()
РубиЦаг. одоо (эсвэл цаг. шинэ). Гарах: Time.now.to_i
Pythonэхлээд цагийг импортлох, дараа нь time.time()
Javaурт эрин = System.currentTimeMillis()/1000;
Microsoft .NET C#epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", Одоо())
Эрланхуанли: огнооны_цагаас_грегорийн_секунд(хуанли:одоо_бүх нийтийн_цаг (одоо()))-719528*24*3600.
MySQLunix_timestamp-г сонго (одоо())
PostgreSQLSELECT задлах(Epo FROM FROM());
SQL серверSELECT DATEDIFF(ууд, "1970-01-01 00:00:00", GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() нь цагийг миллисекундээр буцаана.
Unix/Linuxогноо +%s
Бусад үйлдлийн системТушаалын мөр: perl -e "хэвлэх цаг" (Хэрэв Perl таны системд суулгасан бол)

Огноог Unix цаг руу хөрвүүлж байна...

PHPmktime( үзэх, минут, секунд, сар, өдөр, жил)
Рубицаг.орон нутгийн( жил, сар, өдөр, үзэх, минут, секунд, ашиглахc) (эсвэл GMT/UTC гаралтын хувьд Time.gm). add.to_i гаргахын тулд
Pythonэхлээд цаг, дараа нь int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaурт эрин = шинэ java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", огнооны талбар)
MySQLunix_timestamp ( цаг) Цагийн формат: YYYY-MM-DD HH:MM:SS эсвэл YYMMDD эсвэл YYYYMMDD
PostgreSQLSELECT задлах(Epoch FROM date("2000-01-01 12:34"));
Цагийн тэмдэгтэй: SELECT EXTRACT("2001-02-16 20:38:40-08" ЦАГИЙН БҮСТЭЙ ЦАГИЙН БҮСТЭЙ ЭРХИЙН ЭХНИЙ); Завсарлагатай: EXTRACT SELECT(EPOCH FROM INTERVAL "5 хоног 3 цаг");
SQL серверSELECT DATEDIFF(ууд, "1970-01-01 00:00:00", огнооны талбар)
Unix/Linuxогноо +%s -d"1980 оны 1-р сарын 00:00:01"

Unix цагийг хүн унших боломжтой огноо руу хөрвүүлж байна...

PHPогноо( Формат, unix цаг);
Рубицаг.цаг( unix цаг)
Pythonэхлээд цаг, дараа нь time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix цаг)) GMT огнооны хувьд time.localtime-г time.gmtime гэж солино.
JavaМөр огноо = шинэ java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(шинэ java.util.Date ( unix цаг*1000));
VBScript/ASPDateAdd("s", unix цаг, "01/01/1970 00:00:00")
PostgreSQLЦАГИЙН БҮСТЭЙ "эрин үе"-тэй ЦАГИЙН ТАМЖ СОНГОХ + unix цаг* INTERVAL "1 секунд";
MySQL-аас_unixtime( unix цаг, нэмэлт, гаралтын формат) Стандарт гаралтын формат YYY-MM-DD HH:MM:SS
SQL серверDATEADD(ууд, unix цаг, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Үр дүн нь GMT цагийн бүсэд байх болно. Бусад цагийн бүсийн хувьд: =((A1 +/- бүсийн цагийн зөрүү) / 86400) + 25569.
Линуксогноо -d @1190000000
Бусад үйлдлийн системТушаалын мөр: perl -e "хэвлэх скаляр(локал цаг) unix цаг))" (Хэрэв Perl суулгасан бол) GMT/UTC цагийн бүсийн "localtime"-г "gmtime" гэж солино уу.

"Unixtime Converter" хэрэгсэл юунд хэрэгтэй вэ?

Энэ хэрэгсэл нь ихэвчлэн их хэмжээний огноотой байнга харьцдаг эсвэл ажилдаа тэдний элементүүдийг ихэвчлэн ашигладаг вэбмастеруудад хэрэгтэй болно. "Unixtime Converter" хэрэглүүрийг ашигласнаар та Юникс цагийг хэрэглэгчдэд ээлтэй огноо болгон хялбархан хөрвүүлэх боломжтой (мөн эсрэгээр), одоогийн Unix цагийг олж мэдэх, мөн Юникс цагийг янз бүрийн хэлпрограмчлал, DBMS болон үйлдлийн системүүд.

Unix цаг гэж юу вэ?

Юниксийн эрин (Unix эрин) 1969 оны 12-р сарын 31-ээс 1970 оны 1-р сарын 1-нд шилжих шөнө эхэлсэн. Энэ огноо нь "компьютерийн" цагийн эхлэлийг секундээр тооцдог бөгөөд дискний маш бага зай эзэлдэг - ердөө 4 эсвэл 8 байт. Энэхүү кодчилолын аргын тусламжтайгаар програмистууд дурын огноог нэг тоо болгон "нууж", хэрэглэгчдэд ойлгомжтой формат руу хялбархан хөрвүүлэх боломжтой.

Unix цаг (мөн Unix цаг эсвэл POSIX цаг гэж нэрлэдэг) нь тодорхой тооны талбарт зай эзэлдэггүй, харин нэг утга хэлбэрээр харагдуулдаг тул янз бүрийн үйлдлийн системүүд болон програмчлалын хэлүүдэд ашиглахад тохиромжтой. Нэмж дурдахад UNIX цаг нь UTC стандартад бүрэн нийцдэг (өндөр жилүүдийг оруулаад) - энэ тохиолдолд харгалзах хоёр дахь утгууд давтагдана.

Unix нэр томъёо

Нэр томъёоны талаар хэдэн үг хэлье.

Тэгэхээр, Unix цаг(эсвэл POSIX цаг) нь 1970 оны 1-р сарын 1-ний шөнө дундаас өнөөг хүртэл өнгөрсөн секундын тоо юм.

Unix цагийн тэмдэг(цаг хугацааны тамга) нь "тогтмол" цаг, өөрөөр хэлбэл тоогоор дарагдсан тодорхой огноо юм.

UTC(Universal Coordinated Time) нь гол голчид "тогтсон" бөгөөд газарзүйн цагийн бүсийг тоолдог Universal Coordinated Time юм.

Энэ систем хэр удаан эдэлгээтэй вэ?

Хэдхэн арван жилийн дараа, тухайлбал 2038 оны 1-р сарын 19-ний 03:14:08 цагт Unix цагаар 2147483648 утгад хүрнэ. компьютерийн системүүдэнэ тоог сөрөг гэж тайлбарлаж болно. Энэ асуудлыг шийдэх гол зүйл бол цагийг хадгалахын тулд 64 бит (32 битийн оронд) хувьсагчийг ашиглах явдал юм. Энэ тохиолдолд Unix цагийн тоон утгыг нийлүүлэх нь хүн төрөлхтөнд дахин 292 тэрбум жил үргэлжилнэ. Муу биш, тийм үү?

Unix цаг нь хүн бүрт нэг юм

Хэрэв та Лондон эсвэл Сан Францискод амьдардаг бол таны найзууд Москвад амьдардаг бол Unix цагийг ашиглан "цагаа шалгах" боломжтой. одоогоорцаг хугацаа бүх дэлхийд адилхан. Мэдээжийн хэрэг, хэрэв серверүүд дээрх цагийг зөв тохируулсан бол. Мөн багажийн тусламжтайгаар "Unixtime хувиргагч"Энэ хөрвүүлэлт нь танд секундын багахан хэсгийг зарцуулна.

Зөвхөн Lifeexample уншигчдад зориулж Moguta.CMS дээр 15% хямдралтай онлайн дэлгүүр нээх боломжтой.

Unix цаг ба Unix Timestamp (MySQL, PHP, JavaScript)

Сайн байцгаана уу, эрхэм блог уншигчид, энэ нийтлэлд би юуны тухай танд хэлэхийг хүсч байна Unix цагТэгээд Unix цагийн тэмдэг. Программистууд эдгээр ойлголтуудыг нэг дор нэгтгэдэг боловч энэ нь бүхэлдээ үнэн биш юм. Нэмж дурдахад, нийтлэлд PHP, MySQL болон JavaScript дээр Unix Timestamp-тэй ажиллах талаар олон хэрэгтэй тэмдэглэл багтсан болно.

Яагаад Unix цаг 1970 оны 1-р сарын 1-ээс эхэлдэг вэ?

Хамгийн гол нь Unix-ийн цаг нь анхны UNIX системийг гаргаснаар Unix-ийн эрин үеийг тоолж эхэлдэг. Энэ төрлийн анхны системийг 1969 онд бүтээсэн тул хөгжүүлэгчид 1970 оны 1-р сарын 1-ний UTC шөнө дунд огноог авсан. UTC).

Unix Time, Unix Timestamp гэж юу болохыг ойлгож, тэдэнд тодорхой ойлголт өгье.

Unix цагийн тэмдэг1970 оны 1-р сарын 1-ээс хойш өнгөрсөн секундын тоог илэрхийлсэн тэмдэгтүүдийн дараалал бүхий цагийн тэмдэг юм.

Эдгээр хоёр ойлголтын ялгааг тодруулахын тулд би жишээ өгөхийг хичээх болно.

Энэ нийтлэлийг бичиж байх үед Unix цагтэнцүү байсан 1346765877 .

Таныг энэ мэдээллийг уншиж байх хооронд цаг хугацааны бичлэг ( 1346765877 ) аль хэдийн шошго болсон - Unix цагийн тэмдэг! Энэ цагийн тэмдгийг хүний ​​унших хэлбэрт хөрвүүлснээр бид 2012 оны 04-р сарын 09-ний өдөр, 17:37:57 цагийг авна.

Үнэнийг хэлэхэд, миний бодлоор хоёр ойлголтыг салгах нь тодорхой утгагүй боловч энэ нь юу болох талаар ойлголттой байх нь ашигтай хэвээр байна. Unix цаг, мөн 1970 оноос хойш хамгийн их байж болох секундын тоо хязгаартай гэдгийг ойлгоход хэрэгтэй!

Юниксийн эриний төгсгөл 2038 онд ирнэ

Баримт:дээд тал нь хоёртын тоо 32 бит системд бол тоо юм 01111111 11111111 11111111 11111111 , үүнийг аравтын системд хөрвүүлснээр бид 2147483647 дугаарыг авна.

2038 оны нэгдүгээр сарын 19 03:14:08 цагт Unix-ийн эриний эхэн үеэс хойш өнгөрсөн секундын тоо 32 битийн системд байгаа дээд хэмжээнээс хэтрэх мөч ирнэ, тоо = 2147483647. Хэрэв бит халивал огноо болно. дахин тохируулах.

Энэ онолыг тодорхой жишээгээр шалгах нь маш амархан:

  • Стандарт Windows тооцоолуур нээгээд ALT+3 товчийг дарснаар инженерийн харагдац руу хөрвүүлнэ;
  • 4 байт горим, аравтын оролтын төрлийг тохируулах;
  • 2147483647 дугаарыг бичнэ үү;

  • Хоёртын тоогоор тоон дүрслэлд анхаарлаа хандуулаарай;
  • Дугаар дээр нэгийг нэмэх;

  • Нэмэлтийн үр дүн нь сөрөг тоо байх болно!

Хэрэв бид нэгийг үргэлжлүүлэн нэмбэл бид мөчлөгийн хаалтыг авна.

Энэ бол 2038 оны 1-р сарын 19-ний өдрөөс эхлэн 32 битийн архитектурыг ашигладаг бүх системд дуугарах огноо юм.

Үнэн хэрэгтээ компьютерийн системийн хөгжүүлэгчид 64 битийн архитектурыг өргөн хэрэглээнд нэвтрүүлж байгаа тул гуниглах шаардлагагүй юм. Тэд 2038 он гэхэд амжиж чадна гэдэгт итгэцгээе.

Одоо unix timetamp-д ашиглах талаар ярилцъя php, mysqlтэр ч байтугай дотор javascript.

Unix цагийн тэмдэгтэй ажиллах

Маш чухал цэг Php эсвэл mysql дээр unix цагийн тэмдэгтэй ажиллахдаа энэ огнооны форматын давуу болон сул талуудыг тодорхой ойлгох шаардлагатай.

Жишээлбэл, ЦАГ ХУГАЦААтүүхэн үйл явдал эсвэл алс холын ирээдүйн үйл явдлыг тодорхойлоход ашиглах боломжгүй. Огноог бүхэлд нь 1970 оноос 2038 оны эхэн үе хүртэл хязгаарласан. Хэрэв та 2038 оноос хойш огноог тогтоосон бол 32 битийн систем үүнийг зөв тайлбарлахгүй.

Энэхүү хязгаарлалтыг ойлгосноор логик асуулт гарч ирнэ: " Яагаад огноог хэдхэн секундын дотор төлөөлнө гэж?"

Unix Timestamp хэзээ ашиглах вэ

Бидний ердийн хэмжүүрийн системд цагийг дүрслэхийн тулд 8 байт шаардагдах бөгөөд unix цагийн тэмдэгтийн хувьд энэ нь хоёр дахин бага буюу 4 байт юм.

Мэдээллийн хэмжээг хэмнэх нь миний бодлоор Unix Time ашиглах гол бөгөөд маргаангүй давуу тал юм.

Нэмж дурдахад, түүнтэй ажиллахад хэд хэдэн ашигтай нюансууд байдаг Mysql дээрх UNIX цагийн тэмдэг. Бүх мэдээлэл өгөгдлийн сангийн сервер дээр хадгалагдах ёстой бөгөөд энэ нь эргээд Unix цагийн тэмдэгтэй ажиллахад хэд хэдэн давуу талтай байдаг тул unix цагийн тэмдэглэгээг сонгох нь дараах заалтуудаар зөв үндэслэлтэй байж болно.

MySQL нь Unix цагийн форматтай ажиллахад тохирох Timestamp өгөгдлийн төрлийг өгдөг бөгөөд үүнийг суулгаснаар бид стандарт форматаас даруй ашигтай давуу талыг олж авдаг. огнооТэгээд DATETIME. Давуу тал нь нэмэх үйлдэл хийх үед шинэ оруулгаХүснэгтэд энэ төрлийн өгөгдлийн баганыг автоматаар бөглөнө. Энэ нь бид зөвхөн өгөгдлийн хэмжээ төдийгүй вэб серверийн CPU-ийн цагийг хэмнэж чадна гэсэн үг юм.

Үгийг үйлдлээр нөөцлөхийн тулд бид дараах даалгаврыг тавина: системд шинэ хэрэглэгч бүртгүүлэхдээ мэдээллийн санд нэмсэн огноог оруулах шаардлагатай.

Хэрэв хүснэгтэд огноог хадгалах талбарын төрөл DATETIME, дараа нь PHP скриптийн хүсэлт дараах байдалтай харагдах болно.

Үр ашиг нь ойлгомжтой!

Мөн хасах зүйл бий: TIMESTAMP төрлийн хэд хэдэн талбар байгаа бол зөвхөн эхнийх нь автоматаар шинэчлэгддэг.

Цагийн тэмдгийн оронд INT ашиглах нь утга учиртай юу?

Олон програмистууд unix цагийн тэмдэгтэй ажиллахдаа int(11) бүхэл форматыг ашигладаг. MySQL нь цагийн тэмдгийн төрөлд олон сонголтыг өгдөг тул энэ нь асуултанд бүрэн үндэслэлгүй хандлага юм. ашигтай функцууд, түүнтэй ажиллах хурдад нөлөөлдөг. Тиймээс, INT-д цагийн тэмдгийг хадгалснаар бид энэ форматын бүх серверийн дэмжлэгийг хасах болно. Энэ нь varchar(11) төрлийн id-г хадгалахтай ойролцоогоор ижил юм.

Гэсэн хэдий ч хадгалах нэг үндэслэл бий unix цагийн тэмдэг INT. Өгөгдлийн санг өөр өөр DBMS хооронд шилжүүлэх үед төрлийн зөрчил үүсч болно, жишээлбэл. Аль нэг DBMS-ийн хувьд цагийн тэмдгийн төрөл нь танил бус байж магадгүй. Энэ тохиолдолд бүх DBMS-д энэ формат байдаг тул int ашиглах нь давуу талтай болно.

MySQL хуанлийн төрлүүдийн товч тайлбар

ЦАГ ХУГАЦАА- огноо, цагийг хадгалах өгөгдлийн төрөл. Өгөгдөл нь "Юниксийн эрин үе" эхэлснээс хойш өнгөрсөн секундын тоогоор хадгалагддаг. Үнийн хүрээ: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. 4 байт эзэлнэ.

огноо- огноог хадгалах өгөгдлийн төрөл. Утгын хүрээ: 1000-01-01 - 9999-12-31. 3 байт эзэлнэ.

DATETIME- огноо, цагийг хадгалах өгөгдлийн төрөл. Утгын хүрээ: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Энэ нь 8 байт багтаамжтай бөгөөд YYYYMMDHHMMSS тоо хэлбэрээр хадгалагдана./p>

ЖИЛ- жилийг хадгалах өгөгдлийн төрөл. Утгын хүрээ: 1901 - 2155. 1 байт эзэлнэ.

ЦАГ- цаг хадгалах өгөгдлийн төрөл. Утгын хүрээ: −828:59:59 - 828:59:59. 3 байт эзэлнэ.

Огноог unix болгон хөрвүүлж байна

Огноог хөрвүүлэхэд хэрэгтэй зарим функцуудыг нийтлэх цаг болжээ unix цагийн тэмдэгболон буцах unix-цагунших боломжтой өдөр.

Одоогийн UNIX цагийг хэрхэн авах вэ

  • PHP:

    цаг ();

  • JavaScript:

    Math.round(шинэ огноо().getTime()/1000.0);

  • MySQL:

    SELECT unix_timestamp(одоо());

UNIX цаг эсвэл POSIX цаг (Англи Unix цаг) - тохиромжтой арга UNIX болон бусад POSIX-тэй нийцтэй үйлдлийн системүүдэд үндсэн код болгон ашигладаг цагийн кодчилол.
1969 оны 12-р сарын 31-ээс 1970 оны 1-р сарын 1 хүртэл шөнө дунд (UTC) эхэлсэн Unix Epoch-ийн эхэн үеэс хойш цаг хугацаа өөрөө секундын дотор бичигдсэн байдаг. Unix цаг нь UTC-тэй нийцдэг, ялангуяа UTC үсрэлт секундийг зарлах үед - харгалзах хоёр дахь тоо давтагдана.

Энэ хадгалах аргыг олон систем дэмждэг бөгөөд жишээлбэл, огнооны харьцуулалт нь секундэд үнэн зөв, хадгалалт нь авсаархан бөгөөд хүн уншихад хялбар форматтай байдаг. Мэдээжийн хэрэг, бас сул талууд байдаг, жишээлбэл, сарын дугаар гэх мэт огнооны элементүүдэд байнга хандах үед. Гэсэн хэдий ч ихэнх тохиолдолд огноог талбаруудын цуглуулгын оронд нэг утга болгон хадгалах замаар үр ашигтай байдалд хүрдэг.

UnixTime-г өөр өөр орчинд авах:

Перлцаг
PHPцаг ()
РубиЦаг. одоо (эсвэл цаг. шинэ). Гарах: Time.now.to_i
Pythonэхлээд цагийг импортлох, дараа нь time.time()
Javaурт эрин = System.currentTimeMillis()/1000;
Microsoft .NET C#epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", Одоо())
Эрланхуанли: огнооны_цагаас_грегорийн_секунд(хуанли:одоо_бүх нийтийн_цаг (одоо()))-719528*24*3600.
MySQLunix_timestamp-г сонго (одоо())
PostgreSQLSELECT задлах(Epo FROM FROM());
SQL серверSELECT DATEDIFF(ууд, "1970-01-01 00:00:00", GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() нь цагийг миллисекундээр буцаана.
Unix/Linuxогноо +%s
Бусад үйлдлийн системТушаалын мөр: perl -e "хэвлэх цаг" (Хэрэв Perl таны системд суулгасан бол)

Энгийн огноог хэрхэн UnixTime болгон хөрвүүлэх вэ?

PHPmktime( үзэх, минут, секунд, сар, өдөр, жил)
Рубицаг.орон нутгийн( жил, сар, өдөр, үзэх, минут, секунд, ашиглахc) (эсвэл GMT/UTC гаралтын хувьд Time.gm). add.to_i гаргахын тулд
Pythonэхлээд цаг, дараа нь int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaурт эрин = шинэ java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", огнооны талбар)
MySQLunix_timestamp ( цаг) Цагийн формат: YYYY-MM-DD HH:MM:SS эсвэл YYMMDD эсвэл YYYYMMDD
PostgreSQLSELECT задлах(Epoch FROM date("2000-01-01 12:34"));
Цагийн тэмдэгтэй: SELECT EXTRACT("2001-02-16 20:38:40-08" ЦАГИЙН БҮСТЭЙ ЦАГИЙН БҮСТЭЙ ЭРГҮҮЛЭХ); Завсарлагатай: SELECT EXTRACT(EPOCH FROM INTERVAL "5 хоног 3 цаг");
SQL серверSELECT DATEDIFF(ууд, "1970-01-01 00:00:00", огнооны талбар)
Unix/Linuxогноо +%s -d"1980 оны 1-р сарын 00:00:01"

UnixTime секундийг тодорхой, хүн унших боломжтой огноо болгон хувиргацгаая:

PHPогноо( Формат, unix цаг);
Рубицаг.цаг( unix цаг)
Pythonэхлээд цаг, дараа нь time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix цаг)) GMT огнооны хувьд time.localtime-г time.gmtime гэж солино.
JavaМөр огноо = шинэ java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(шинэ java.util.Date ( unix цаг*1000));
VBScript/ASPDateAdd("s", unix цаг, "01/01/1970 00:00:00")
PostgreSQLЦАГИЙН БҮСТЭЙ "эрин үе"-тэй ЦАГИЙН ТАМЖ СОНГОХ + unix цаг* INTERVAL "1 секунд";
MySQL-аас_unixtime( unix цаг, нэмэлт, гаралтын формат) Стандарт гаралтын формат YYY-MM-DD HH:MM:SS
SQL серверDATEADD(ууд, unix цаг, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Үр дүн нь GMT цагийн бүсэд байх болно. Бусад цагийн бүсийн хувьд: =((A1 +/- бүсийн цагийн зөрүү) / 86400) + 25569.
Линуксогноо -d @1190000000
Бусад үйлдлийн системТушаалын мөр: perl -e "хэвлэх скаляр(локал цаг) unix цаг))" (Хэрэв Perl суулгасан бол) GMT/UTC цагийн бүсийн "localtime"-г "gmtime" гэж солино уу.

Ихэнх тохиолдолд мэдээллийг хулгайлсан байна:

Энэ хэрэгсэл нь огноог Unix TimeStamp форматаас хүний ​​унших боломжтой огноо руу хөрвүүлэхэд хэрэгтэй.

Unix цаг гэж юу вэ, юунд ашиглагддаг вэ?Үүнийг юунд ашиглаж байгааг ойлгохын тулд би эхлэх болно ерөнхий ойлголт, Unix цаг гэж юу вэ.

Unix цаг (эсвэл Орос хэл рүү орчуулсан TimeStamp нь "цаг хугацааны тамга" гэсэн утгатай бөгөөд ижил утгатай) 1970 оны 1-р сарын 1-ээс хойш өнгөрсөн секундын тоо юм.

Өөрөөр хэлбэл, 1970 оны 01-р сарын 00:00:00 цагийн Unix TimeStamp нь 0-тэй тэнцүү байсан. 2 минутын дараа (120 секунд) Юниксийн цаг аль хэдийн 120-той тэнцсэн. Жишээлбэл, нэг өдрийн дараа (01) /02/1970 00:00:00) 60*60*24=86400 секунд өнгөрсөн тул Юниксийн цаг аль хэдийн 86400-тай тэнцэж байна.Одоо Юникс цагийн тэмдэг аль хэдийн 1561815370 болсон бөгөөд секундын тоо байнга эргэлдэж байгаа тул тоо байнга өсч байна. Гэхдээ яагаад үүнийг ашиглах вэ?Хамгийн гол нь Unix TimeStamp нь програмчлалын үед огноог хадгалах, удирдахад ашиглахад тохиромжтой.

Би дэлгэрэнгүй ярихгүй, гэхдээ товчхондоо, тоо нь "зүүн" тэмдэгттэй мөрийг бодвол тоолох, харьцуулах нь илүү тохиромжтой юм.

Тийм ч учраас ихэнх хөгжүүлэгчид өөрсдийн төсөл болон өгөгдлийн сан дахь огноотой ажиллахын тулд Unix TimeStamp ашигладаг бөгөөд бид ихэвчлэн "огноо" талбарт маш онцгой зүйлийг хардаг.

их тоо , огноотой огт адилгүй.Энд л энэ хэрэгсэл хэрэг болно. Үүний тусламжтайгаар та тэр “мэдээллийн сангаас гарсан том дугаар”-ыг хүний ​​унших огноо болгон хялбархан орчуулж болно. Үүнээс гадна та бүр эсрэгээр нь хийж, дурын огноог Unix TimeStamp болгон хувиргаж болно. Эдгээр нь энэ хөрвүүлэгчид олгосон боломжууд юм.

→ Энэ асуудлыг шийдэх гарц аль хэдийн олдсон. 2038 онд сайтууд цагаа зөв бичихээ зогсоохгүйн тулд 64 бит ашиглахад хангалттай. үйлдлийн систем 32-бит биш, хостинг/VDS/зориулалтын сервер дээр. Компьютерийн хүч чадал хурдацтай нэмэгдэж, өртөг нь буурч байгаа энэ үед бүх зүйл 2038 он гэхэд вэбсайтыг орон зайгаар хангах чиглэлээр үйлчилгээ үзүүлдэг дийлэнх хэсгийг 64 битийн үйлдлийн систем дээр үндэслэн хийх болно. Дашрамд хэлэхэд, 64 битийн системд ийм асуудал дор хаяж 292 тэрбум жилийн турш бидэнд нөлөөлөхгүй бөгөөд үүнийг анхаарч үзэхэд хангалттай юм. 2038 оны асуудалшийдэгдсэн.