유닉스 시대).

정수 표현

매일 Unix 시간을 나타내는 숫자는 UTC(00:00:00Z)에 설명된 대로 계산되며 자정부터 초당 정확히 1씩 증가합니다. 따라서 위의 예에서 16-09-2004 17:55:43.54, 64543.54초는 UNIX 시간에서 1095292800 + 64543.54 = 1095357343.54로 표시됩니다. 카운트다운 시작 이전 날짜의 경우 숫자도 증가합니다. 시간이 지남에 따라 0이 되는 경향이 있습니다.

사용된 정수 시스템은 날짜를 비교하고 저장하는 데 사용하기 편리합니다(이 형식의 날짜 및 시간은 4바이트 또는 8바이트만 사용). 날짜 요소(일, 월, 연도)를 참조해야 하는 경우 초를 적절한 형식으로 변환할 수 있습니다(반대의 경우도 마찬가지).

프로그램은 부호 있는 정수 유형을 사용하여 UNIX 시간을 저장합니다. 서명된 32비트 숫자는 1901년 12월 13일 금요일 오후 8:45:52부터 2038년 1월 19일 화요일 03:14:07까지의 시간을 참조할 수 있습니다.

대부분의 UNIX 계열 시스템에서 현재 UNIX 시간을 가져오려면 date +%s 명령을 사용할 수 있습니다.

"희년"의 의미

시간 초 수
1901년 12월 13일, 20:45:52 UTC

32비트 부호 있는 표기법의 최소 날짜(0x80000000)

2038년 1월 19일 03:14:07 UTC

32비트 부호 있는 표기법의 최대 날짜(0x7FFFFFFF)

2001년 9월 9일, 01:46:40 UTC 1,000,000,000(1기가초)
2004년 1월 10일 13:37:04 UTC 1 073 741 824 = 2 30(1 기비초)
2005년 3월 18일 01:58:31 UTC 1 111 111 111
2008년 9월 6일 12:12:05 UTC 1 220 703 125 = 5 13
2009년 2월 13일 23:31:30 UTC 1 234 567 890

2038년의 문제

유닉스 시스템으로서의 애플 iOS의 문제점

Apple의 64비트 iOS 기기에는 다음과 같은 문제가 있습니다. 유닉스 시스템. 1970년 1월 1일, iOS를 실행하는 64비트 프로세서가 탑재된 기기에서 시간을 1로 설정하고 기기를 재부팅하면 UTC +1:30 이상의 시간대에서 기기를 재부팅한 후 켜지지 않고 항상 "하얀 사과"로 빛납니다. 이것은 시간대의 차이로 인해 발생합니다. 즉, UTC +1:30 시간대에서 1970년 1월 1일 1:00으로 변환하면 UNIX 시간 카운터는 음수가 됩니다. 카운트다운은 시스템이 이해할 수 없는 UTC 시간부터 시작되어 카운터가 정지됩니다. 장치는 DFU를 통해 복원되지도 않지만 문제는 다른 방식으로 세 가지 솔루션이 있습니다. 첫 번째 방법: 장치를 켜둔 상태로 두고 UNIX 시간 카운터가 올라갈 때까지 기다리십시오. 이 방법일하고있는). 두 번째 방법: 전화기의 배터리가 완전히 소모되고 카운터 자체가 0으로 재설정될 때까지 기다리십시오. 세 번째 방법: 장치를 분해하고 잠시 동안 배터리를 분리한 다음 장치를 다시 조립하면 카운터도 0으로 재설정되고 장치가 작동합니다.

이 문제는 iOS 9.3.1에서 마침내 해결되었습니다. 이제 장치에서 2001년 1월 1일부터 날짜를 설정할 수 있습니다.

소프트웨어 변환

UNIX 시간과 날짜 및 시간으로 일반적인 표현 사이의 변환 기능을 C 언어로 구현한 예가 제공됩니다. 예제는 표준 32비트 부호 있는 형식으로 제공됩니다. 그러나 _XT_SIGNED 정의를 주석 처리하면 예제가 unsigned 형태로 컴파일됩니다.

시간 변환 헤더 파일

typedef unsigned short u16_t; typedef unsigned long u32_t; typedef 서명된 짧은 s16_t; typedef 서명된 long 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_min; BYTE tm_hour; BYTE tm_mday; BYTE tm_mon; u16_t tm_year; ); 무효 xttotm(구조체 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 #define _TBIAS_YEAR 1900 #define 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(구조 tm *t ) ( /* 시간 구조를 스칼라 시간으로 변환 */ s32_t days; xtime_t secs; s32_t mon, year; /* 일 수를 계산합니다. */ mon = t->tm_mon - 1; year = t->tm_year - _TBIAS_YEAR; 일 = Daysto32(년, 월) - 1, 일 += 365 * 연도, 일 += t->tm_mday, 일 -= _TBIAS_DAYS, /* 초 수 계산 */ 초 = 3600 * t->tm_hour, 초 += 60 * t->tm_min; 초 += t->tm_sec; 초 += (일 * (xtime_t)86400); 반환(초); ) //////////////// ////////////////////////////////////////////////////// / //// 무효 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 = 0sec ( u32_t)secsarg; 일 = _TBIAS_DAYS; ) else ( 초 = (u32_t)secsarg + _TBIAS_SECS; 일 = 0; ) #else 초 = secsarg; 일 = _TBIAS_DAYS; #endif /* 일, 시, 분, 초 */ 일 += 초 / 86400; 초 = 초 % 86400; t->tm_hour = 초 / 3600; 초%= 3600; t->tm_min = 초 / 60; t->tm_sec = 초 % 60; /* 연도 결정 */ for (년 = 일 / 365; 일< (i = Daysto32(year, 0) + 365*year);) { --year; } days -= i; t->tm_year = 연도 + _TBIAS_YEAR; /* 월 결정 */ pm = MONTAB(년); (월 = 12; 일 동안< pm[--mon];); t->tm_mon=월+1; t->tm_mday = 일 - 오후 + 1; )

Excel에서 Unix 형식으로 시간 변환

이중 등; // Excel 형식의 날짜 및 시간(OpenOffice, Sierra 차트에서도 사용됨) time_t ut = round((et * 86400) - 2209161600); // Unix 형식의 날짜 및 시간

"UNIX time" 기사에 대한 리뷰 작성

메모

외부 링크

UNIX 시간을 특징짓는 발췌문

Chernyshev는 첫 번째 방의 창가에 프랑스 소설 책과 함께 앉아있었습니다. 이 방은 아마도 예전에 홀이었을 것입니다. 그 안에는 여전히 오르간이 있었고, 그 위에 일종의 카펫이 쌓여 있었고, 한쪽 구석에는 부관 Benigsen의 접이식 침대가 있었습니다. 이 부관이 여기에 있었다. 잔치나 장사에 지친 것 같던 그는 접힌 침대에 앉아 졸았다. 홀에서 이어지는 두 개의 문이 하나는 이전 거실로 직접 연결되고 다른 하나는 오른쪽으로 사무실로 연결됩니다. 첫 번째 문에서 독일어와 때때로 프랑스어를 말하는 목소리가 들렸습니다. 이전 거실에는 군주의 요청에 따라 군사 평의회가 소집되지 않고 (군주는 불확실성을 좋아했습니다) 다가오는 어려움에 대한 의견을 알고 싶어하는 사람들이 모였습니다. 군사평의회가 아니라, 군주를 위해 개인적으로 어떤 문제를 명확히 하기 위한, 말하자면 선출된 자들의 평의회였다. 다음은 이 반쪽 회의에 초대되었습니다. 스웨덴 장군 Armfeld, Wolzogen 중장, Winzingerode(나폴레옹이 도망친 프랑스인 대상이라고 부름), Michaud, Tol, 전혀 군인이 아닌 Stein 백작, 그리고 마지막으로 Puel 자신, Andrei 왕자가 들은 대로 그는 전체 사업의 기초가 되었습니다. Andrei 왕자는 그를 잘 조사할 기회를 가졌습니다. Pfuel이 그 직후에 도착하여 응접실로 들어가서 Chernyshev와 이야기하기 위해 잠시 멈추었기 때문입니다.
푸푸엘은 언뜻 보기에 안드레이 왕자에게 한 번도 본 적이 없지만, 마치 차려입은 것처럼 어색하게 앉아 있는 그의 러시아 장군의 형편없이 맞춰진 제복을 입고 있는 것처럼 보였습니다. 여기에는 Weyrother, Mack, Schmidt, 그리고 Andrei 왕자가 1805년에 볼 수 있었던 다른 많은 독일 장군 이론가들이 포함되었습니다. 그러나 그는 그들 모두보다 더 전형적이었습니다. 안드레이 왕자는 그 독일인의 모든 것을 자신 안에 통합시킨 그런 독일 이론가를 본 적이 없습니다.
Pful은 짧고 매우 가늘었지만 뼈가 넓고 거칠고 건강한 체격에 넓은 골반과 뼈가 있는 견갑골을 가지고 있었습니다. 그의 얼굴은 깊은 주름과 함께 매우 주름져 있었습니다. 관자놀이 앞의 그의 머리카락은 분명히 브러시로 급하게 다듬었고 그 뒤에는 순진하게 술이 붙어있었습니다. 그는 불안하고 화난 표정으로 주위를 둘러보며 마치 자신이 들어간 넓은 방의 모든 것이 두려운 것처럼 방으로 들어갔습니다. 어색한 움직임으로 칼을 들고 그는 Chernyshev에게 몸을 돌려 주권자가 어디에 있는지 독일어로 물었다. 그는 가능한 한 빨리 방을 둘러보고 인사와 인사를 마치고 지도 앞에 앉아 일하기를 원했을 것입니다. 그는 체르니셰프의 말에 황급히 고개를 끄덕였고, 아이러니하게도 미소를 지으며 군주가 자신이 이론에 따라 쌓은 요새를 점검하고 있다는 말을 듣습니다. 그는 베이시스트였고 쿨했다. 자신감 있는 독일인들이 말했듯이 Dummkopf ... or: zu Grunde die ganze Geschichte ... or: s "wird was gescheites d" raus werden ... [넌센스 ... 지옥에 ... (독일어) ] Andrei 왕자는 듣지 않았고 통과하기를 원했지만 Chernyshev는 Andrei 왕자가 전쟁이 그렇게 행복하게 끝난 터키에서 왔다고 지적하면서 Andrei 왕자를 Pful에게 소개했습니다. 퓨엘은 안드레이 왕자를 빤히 쳐다보지도 않고 그를 빤히 쳐다보며 웃으면서 말했습니다. "Da muss ein schoner taktischcr Krieg gewesen sein." ["정확한 전술전이었음에 틀림없다." (독일어)] - 그리고 경멸스럽게 웃으며 목소리가 들리는 방으로 들어갔다.
항상 아이러니한 자극을 받을 준비가 되어 있던 Pfuel은 그가 없이 감히 그의 진영을 조사하고 그를 심판한다는 사실에 오늘 특히 동요한 것 같습니다. Austerlitz에 대한 그의 기억 덕분에 Pfuel과의 짧은 만남에서 Andrei 왕자는 이 남자의 명확한 특성을 구성했습니다. Pfuel은 절망적으로, 변함없이, 순교의 지경에 이르렀고, 독일인만이 가질 수 있는 자신감 넘치는 사람들 중 하나였으며, 정확히는 독일인만이 추상적 관념, 즉 과학, 즉 과학에 대한 상상의 지식에 기초하여 자신감을 갖고 있기 때문입니다. 완벽한 진실. 프랑스인은 자신을 마음과 몸 모두에서 개인적으로 생각하기 때문에 자신감이 넘칩니다. 남성과 여성 모두에게 거부할 수 없을 정도로 매력적입니다. 영국인은 자신이 세계에서 가장 편안한 국가의 시민이라는 근거로 자신감을 갖고 있으므로 영국인으로서 항상 자신이 해야 할 일을 알고 있으며 영국인으로서 하는 모든 것이 의심의 여지가 없음을 알고 있습니다. 좋은. 이탈리아인은 초조해하고 자신과 타인을 쉽게 잊어버리기 때문에 자신감이 있습니다. 러시아인은 아무것도 모르고 알기를 원하지 않기 때문에 자신감이 있습니다. 왜냐하면 그는 아무것도 완전히 아는 것이 가능하다고 믿지 않기 때문입니다. 독일인은 누구보다 자신만만하고, 누구보다 강하고, 누구보다 역겹다. 왜냐하면 그는 자신이 발명했지만 그에게는 절대적인 진리인 과학, 진리를 안다고 상상하기 때문이다. 분명히 Pfuel이었습니다. 그는 과학 - 프리드리히 대왕 전쟁의 역사에서 파생된 비스듬한 운동 이론과 프리드리히 대왕 전쟁의 최근 역사에서 그가 만난 모든 것, 그리고 그가 최근에 조우한 모든 것을 가지고 있었습니다. 군사 역사는 그에게 말도 안되는 것, 야만적 인 것, 추악한 충돌로 보였습니다.이 전쟁은 양쪽에서 너무 많은 실수를해서 전쟁이라고 할 수 없었습니다. 이론에 맞지 않고 과학의 주제가 될 수 없었습니다.
1806년에 Pfuel은 Jena와 Auerstet에서 끝난 전쟁 계획의 초안 작성자 중 한 명이었습니다. 그러나 이 전쟁의 결과, 그는 그의 이론이 부정확하다는 증거를 조금도 보지 못했습니다. 오히려 그의 개념에 따르면 그의 이론에서 벗어난 일탈이 모든 실패의 유일한 이유였으며 그는 특유의 즐거운 아이러니로 "Ich sagte ja, daji die ganze Geschichte zum Teufel gehen wird"라고 말했습니다. [결국, 나는 모든 것이 지옥에 갈 것이라고 말했다(독일어)] Puel은 이론을 너무 사랑해서 이론의 목적, 즉 이론의 실제 적용을 잊어버린 이론가 중 한 명이었습니다. 이론을 사랑한 그는 모든 실천을 싫어했고 그것을 알고 싶어하지 않았습니다. 그는 이론과 실제의 일탈에서 비롯된 실패가 그의 이론의 타당성을 그에게 증명했기 때문에 그의 실패를 기뻐하기까지했습니다.
그는 Andrei 왕자와 Chernyshev에게 모든 것이 나쁠 것임을 미리 알고 불만조차 갖지 않는 사람의 표정으로 실제 전쟁에 대해 몇 마디 말했습니다. 뒷머리에 삐져나온 빗질하지 않은 술과 급하게 닦은 관자놀이가 특히 웅변으로 이를 확인했다.
그는 다른 방으로 들어갔고, 그의 목소리의 저음과 투덜거리는 소리는 즉시 거기에서 들렸다.

안드레이 왕자가 눈으로 프퓨엘을 따를 시간이 있기 전에 베니그센 백작은 서둘러 방으로 들어가 볼콘스키에게 고개를 끄덕이며 멈추지 않고 사무실로 들어가 부관에게 몇 가지 명령을 내렸다. 군주가 그를 따랐고 Bennigsen은 서둘러 앞으로 무언가를 준비하고 시간에 군주를 만났습니다. Chernyshev와 Andrei 왕자는 현관으로 나갔습니다. 지친 표정의 군주는 말에서 내렸다. 파울루치 후작이 군주에게 말했습니다. 군주는 왼쪽으로 고개를 숙인 채, 특히 열성적으로 말하는 파울루치의 말을 불만스러운 표정으로 들었다. 황제는 분명히 대화를 끝내려는 듯 앞으로 나아갔지만, 예의를 잊어버린 얼굴이 붉어지고 동요한 이탈리아인이 그를 따라가며 계속 말했습니다.
- Quant a celui qui conseille ce camp, le camp de Drissa, [드리사 캠프에 조언을 한 사람은] - Pauluchi가 말했습니다. 그 동안 주권자는 계단에 들어가 안드레이 왕자를 알아차리고 낯선 얼굴을 바라보았습니다.

Unix 시간 또는 Unix epoch(Unix epoch 또는 Unix 시간 또는 POSIX 시간 또는 Unix 타임스탬프)란 무엇입니까?

UNIX 시간 또는 POSIX 시간(eng. Unix 시간)은 UNIX 및 기타 POSIX 호환 운영 체제에서 채택된 시간 인코딩 방법입니다.
시작점은 1969년 12월 31일부터 1970년 1월 1일까지 자정(UTC)이며, 그 순간부터의 시간을 "UNIX 시대"(Eng. Unix Epoch)라고 합니다.
UNIX 시간은 UTC와 일치하며 특히 UTC 윤초를 선언할 때 해당하는 초 숫자가 반복됩니다.
시간을 초 단위로 저장하는 방법은 날짜(초 단위까지 정확)를 비교할 때와 날짜를 저장할 때 사용하기에 매우 편리합니다. 필요한 경우 사람이 읽을 수 있는 형식으로 변환할 수 있습니다. 이 형식의 날짜 및 시간도 매우 작은 공간(기계어 크기에 따라 4바이트 또는 8바이트)을 차지하므로 많은 양의 날짜를 저장하는 데 사용하는 것이 합리적입니다. 월 등의 날짜 요소에 대한 액세스가 매우 빈번할 때 성능상의 단점이 나타날 수 있지만 대부분의 경우 시간을 필드 집합보다 단일 값으로 저장하는 것이 더 효율적입니다.

Unix epoch를 사람이 읽을 수 있는 날짜로 변환


년, 월 또는 일의 Unix 시작 및 종료 날짜


초를 일, 시간, 분으로 변환


유닉스 시간을 얻는 방법 ...

시각
PHP시각()
루비Time.now(또는 Time.new). 출력하려면: Time.now.to_i
파이썬먼저 시간을 가져온 다음 time.time()
자바긴 에포크 = System.currentTimeMillis()/1000;
마이크로소프트 .NET C#신기원 = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VB스크립트/ASPDateDiff("s", "01/01/1970 00:00:00", Now())
얼랑달력:datetime_to_gregorian_seconds(calendar:now_to_universal_time(now()))-719528*24*3600.
MySQLSELECT unix_timestamp(지금())
PostgreSQLSELECT 추출(에포크 FROM now());
SQL 서버날짜 선택DIFF(들, "1970-01-01 00:00:00", GETUTCDATE())
자바스크립트Math.round(new Date().getTime()/1000.0) getTime()은 시간을 밀리초 단위로 반환합니다.
유닉스/리눅스날짜+%s
기타 OS명령줄: perl -e "print time"(Perl이 시스템에 설치된 경우)

날짜를 Unix 시간으로 변환하여...

PHPmktime( 시계, , , , , 년도)
루비시간.local( 년도, , , 시계, , , 유젝) (또는 GMT/UTC 출력의 경우 Time.gm). 출력하려면 .to_i를 추가하십시오.
파이썬먼저 시간을 가져온 다음 int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S"))))
자바긴 신기원 = 새로운 java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
VB스크립트/ASPDateDiff("s", "01/01/1970 00:00:00", 날짜 필드)
MySQLSELECT 유닉스_타임스탬프( 시각) 시간 형식: YYYY-MM-DD HH:MM:SS 또는 YYMMDD 또는 YYYYMMDD
PostgreSQLSELECT extract(epoch FROM date("2000-01-01 12:34"));
타임스탬프 포함: SELECT EXTRACT(시간대가 포함된 EPOCH FROM TIMESTAMP "2001-02-16 20:38:40-08"); 간격: SELECT EXTRACT(EPOCH FROM INTERVAL "5일 3시간");
SQL 서버SELECT DATEDIFF(들, "1970-01-01 00:00:00", 날짜 필드)
유닉스/리눅스날짜 +%s -d"1980년 1월 1일 00:00:01"

Unix 시간을 사람이 읽을 수 있는 날짜로 변환하는 중...

PHP데이트( 체재, 유닉스 시간);
루비시간.at( 유닉스 시간)
파이썬먼저 시간을 가져온 다음 time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( 유닉스 시간)) time.localtime을 GMT 날짜의 time.gmtime으로 바꿉니다.
자바문자열 날짜 = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date( 유닉스 시간*1000));
VB스크립트/ASPDateAdd("s", 유닉스 시간, "01/01/1970 00:00:00")
PostgreSQL시간대 "에포크"가 포함된 타임스탬프 선택 + 유닉스 시간* 간격 "1초";
MySQLfrom_unixtime( 유닉스 시간, 선택 사항, 출력 형식) 표준 출력 형식 YYY-MM-DD HH:MM:SS
SQL 서버DATEADD, 유닉스 시간, "1970-01-01 00:00:00")
마이크로 소프트 엑셀=(A1 / 86400) + 25569 결과는 GMT 시간대가 됩니다. 다른 시간대의 경우: =((A1 +/- 영역 차이) / 86400) + 25569.
리눅스날짜 -d@1190000000
기타 OS명령줄: perl -e "print scalar(localtime( 유닉스 시간))" (Perl이 설치된 경우) GMT/UTC 시간대의 경우 "localtime"을 "gmtime"으로 바꿉니다.

"Unixtime 변환기" 도구는 무엇을 위한 것입니까?

이 도구는 무엇보다도 지속적으로 많은 양의 날짜를 처리하거나 종종 작업에서 날짜의 요소를 참조하는 웹마스터에게 유용합니다. "Unixtime Converter" 도구를 사용하면 Unix 시간을 사용자에게 친숙한 날짜(또는 그 반대로)로 쉽게 변환하고, 현재 Unix epoch 시간을 찾고, 다양한 프로그래밍 언어, DBMS 및 운영 체제에서 Unix 시간을 얻을 수 있습니다.

유닉스 시간이란 무엇입니까?

유닉스 시대(Unix epoch)는 1969년 12월 31일 밤부터 1970년 1월 1일까지를 의미합니다. 이 날짜는 초 단위로 계산되고 디스크 공간이 4~8바이트에 불과한 아주 작은 공간을 차지하는 "컴퓨터" 시간의 시작점으로 사용되었습니다. 이 인코딩 방법을 사용하여 프로그래머는 모든 날짜를 단일 숫자로 "숨길" 수 있고 쉽게 다시 사용자 친화적인 형식으로 변환할 수 있습니다.

Unix 시간(Unix 시간 또는 POSIX 시간이라고도 함)은 공간을 차지하는 특정 수의 필드가 아닌 단일 값으로 표시되기 때문에 다양한 운영 체제 및 프로그래밍 언어에서 사용하기 편리합니다. 또한 UNIX 시간은 UTC 표준(윤년 포함)과 완전히 일치합니다. 이 경우 해당 초는 단순히 반복됩니다.

유닉스 용어

용어에 대한 몇 마디.

그래서, 유닉스 시간(또는 POSIX 시간)은 1970년 1월 1일 자정부터 현재까지 경과한 시간(초)입니다.

유닉스 타임스탬프(timestamp)는 "고정된" 시간, 즉 숫자에 각인된 특정 날짜입니다.

UTC(Universal Coordinated Time)은 0 자오선에 "고정"되고 지리적 시간대가 계산되는 세계 협정시입니다.

이 시스템은 얼마나 내구성이 있습니까?

불과 20년 후, 즉 2038년 1월 19일 03:14:08 UTC에 Unix 시간은 값 2147483648에 도달하고 컴퓨터 시스템은 이 숫자를 음수로 해석할 수 있습니다. 이 문제를 해결하는 열쇠는 64비트(32비트 대신) 변수를 사용하여 시간을 저장하는 데 있습니다. 이 경우 Unix 시간의 숫자 값의 재고는 앞으로 2920억 년 동안 인류에게 충분할 것입니다. 나쁘지 않죠?

유닉스 시간은 누구에게나 동일하다

런던이나 샌프란시스코에 살고 있고 친구가 모스크바에 있다면 Unix 시간을 사용하여 "시계를 동기화"할 수 있습니다. 이 시스템은 이 순간시간은 전 세계적으로 동일합니다. 물론 서버의 시간이 올바르게 설정되어 있으면. 그리고 도구로 "유닉스 타임 변환기"이러한 변환에는 몇 초도 걸리지 않습니다.

Lifeexample 독자만 Moguta.CMS에서 15% 할인된 가격으로 온라인 상점을 열 수 있습니다.

Unix 시간 및 Unix 타임스탬프(MySQL, PHP, JavaScript)

안녕하세요, 블로그 독자 여러분, 이 기사에서 유닉스 시간그리고 유닉스 타임스탬프. 종종 프로그래머는 이러한 개념을 하나로 결합하지만 이것은 완전히 사실이 아닙니다. 또한 이 기사에는 PHP, MySQL 및 JavaScript에서 Unix 타임스탬프 작업에 대한 유용한 참고 사항이 많이 포함되어 있습니다.

유닉스 시간이 1970년 1월 1일에 시작하는 이유

요점은 유닉스 시간이 최초의 유닉스 시스템의 출시와 함께 유닉스 시대를 계산하기 시작한다는 것입니다. 이러한 종류의 첫 번째 시스템은 1969년에 만들어졌으므로 개발자는 1970년 1월 1일 자정 UTC( UTC).

Unix time과 Unix Timestamp가 무엇을 위한 것인지 이해하고 명확한 개념을 제공합시다.

유닉스 타임스탬프1970년 1월 1일 이후 경과된 초 수를 나타내는 문자 시퀀스인 타임스탬프입니다.

이 두 개념의 차이점을 명확히 하기 위해 예를 들어보겠습니다.

이 글을 쓰는 시점에서, 유닉스 시간평등했다 1346765877 .

귀하가 이 정보를 읽을 때 시간 기록( 1346765877 ) 는 이미 레이블입니다 - 유닉스 타임스탬프! 이 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하면 날짜 04-09-2012 및 시간 17:37:57 을 얻습니다.

솔직히 말해서 두 개념을 분리하는 데 특별한 포인트는 없다고 생각하지만, 그것이 무엇인지에 대한 아이디어를 갖는 것은 여전히 ​​유용합니다. 유닉스 시간, 그리고 1970년 이후로 경과된 최대 가능한 초 수에는 제한이 있다는 것을 이해하는 것도 유용합니다!

유닉스 시대의 종말은 2038년에 온다

사실: 32비트 시스템에서 최대 이진수는 숫자입니다. 01111111 11111111 11111111 11111111 , 십진수로 변환하면 숫자 2147483647을 얻습니다.

2038년 1월 19일 03:14:08에 Unix 시대가 시작된 이후 경과된 시간(초)이 32비트 시스템에서 사용할 수 있는 최대값(숫자 = 2147483647)을 초과하는 순간이 올 것입니다. 비트가 오버플로되면 날짜가 재설정됩니다. .

예시적인 예를 통해 이 이론을 테스트하는 것은 매우 쉽습니다.

  • 표준 Windows 계산기를 열고 ALT + 3을 누르면 엔지니어링 보기로 변환됩니다.
  • 4바이트 모드 및 10진수 입력 유형을 설정합니다.
  • 숫자 2147483647 쓰기 ;

  • 이진수의 숫자 표현에 주의하십시오.
  • 숫자에 1을 더하세요.

  • 덧셈의 ​​결과는 음수입니다!

하나를 계속 추가하면 순환 클로저가 발생합니다.

32비트 아키텍처를 사용하는 모든 시스템에서 2038년 1월 19일부터 발생하는 날짜 벨소리입니다.

사실, 슬퍼해서는 안 됩니다. 컴퓨터 시스템 개발자가 64비트 아키텍처를 널리 사용하기 위해 점점 더 많이 도입하고 있기 때문입니다. 우리는 그들이 2038년까지 시간을 가질 것이라고 믿을 것입니다.

이제 Unix 타임스탬프를 사용하는 방법에 대해 이야기해 보겠습니다. PHP, mysql그리고 심지어 자바스크립트.

유닉스 타임스탬프로 작업하기

php 또는 mysql에서 유닉스 타임스탬프로 작업할 때 매우 중요한 점은 그러한 날짜 형식의 장단점을 명확하게 이해할 필요가 있다는 것입니다.

예를 들어, 타임스탬프먼 미래의 역사적 사건이나 사건을 설정하는 데 사용할 수 없습니다. 전체 날짜 집합은 1970년부터 2038년 초까지의 기간으로 제한됩니다. 2038년 범위를 벗어나는 날짜를 설정하면 32비트 시스템에서 올바르게 해석되지 않습니다.

이 한계를 깨닫고 논리적인 질문이 생깁니다. " 왜 초 단위로 날짜 표현을 귀찮게 합니까?"

유닉스 타임스탬프를 사용하는 경우

일반적인 측정 시스템에서 시간을 나타내려면 8바이트가 필요하고 유닉스 타임스탬프의 경우 절반인 4바이트가 필요합니다.

제 생각에는 데이터의 양을 절약하는 것이 Unix Time을 사용하는 데 있어 가장 중요하고 논쟁의 여지가 없는 장점입니다.

또한 작업할 때 사용할 수 있는 유용한 뉘앙스가 많이 있습니다. mysql의 UNIX 타임스탬프. 그리고 모든 정보는 데이터베이스 서버에 저장되어야 하고 Unix 타임스탬프로 작업할 때 여러 이점이 있기 때문에 Unix 타임스탬프에 대한 선택은 다음 조항에 의해 올바르게 정당화될 수 있습니다.

MySQL은 표준 형식에 비해 즉시 유용한 이점을 제공하는 설정을 통해 유닉스 시간 형식으로 작업할 수 있는 해당 타임스탬프 데이터 형식을 제공합니다. 데이트그리고 날짜 시간. 장점은 추가 작업을 수행함으로써 새로운 기록테이블에 이 데이터 유형의 열이 자동으로 채워집니다. 이는 데이터의 양뿐만 아니라 웹 서버의 CPU 시간도 절약할 수 있음을 의미합니다.

행동으로 단어를 강화하기 위해 다음 작업을 설정합시다. 시스템에 새 사용자를 등록할 때 데이터베이스에 추가한 날짜를 입력해야 합니다.

테이블에 날짜를 저장하는 필드의 유형이 다음과 같은 경우 날짜 시간, PHP 스크립트의 요청은 다음과 같습니다.

이점은 분명합니다!

마이너스도 있다: TIMESTAMP 유형의 필드가 여러 개 있는 경우 첫 번째 필드만 자동으로 업데이트됩니다.

타임스탬프 대신 INT를 사용하는 것이 합리적입니까?

많은 프로그래머가 유닉스 타임스탬프로 작업할 때 정수 형식 int(11) 을 사용합니다. MySQL은 작업 속도에 영향을 주는 타임스탬프 유형에 대해 많은 유용한 기능을 제공하기 때문에 이것은 질문에 대한 합리적인 접근 방식이 아닙니다. 따라서 타임스탬프를 INT에 저장하여 이 형식에 대한 모든 서버 지원을 박탈합니다. 이는 varchar(11) 형식으로 id를 저장하는 것과 거의 같습니다.

그러나 유지하는 데에는 하나의 정당성이 있습니다. 유닉스 타임 스탬프를 int로. 서로 다른 DBMS 간에 데이터베이스를 전송할 때 유형 충돌이 발생할 수 있습니다. DBMS 중 하나의 경우 타임스탬프 유형이 생소할 수 있습니다. 이 경우 모든 DBMS에 이 형식이 있으므로 int 사용이 우선합니다.

MySQL 캘린더 유형에 대한 간략한 설명

타임스탬프- 날짜와 시간을 저장하기 위한 데이터 유형. 데이터는 "Unix epoch"가 시작된 이후 경과된 시간(초)으로 저장됩니다. 값 범위: 1970-01-01 00:00:00 - 2038-12-31 00:00:00 4바이트를 차지합니다.

데이트- 날짜 저장을 위한 데이터 유형. 값 범위: 1000-01-01 - 9999-12-31. 3바이트를 차지합니다.

날짜 시간- 날짜와 시간을 저장하기 위한 데이터 유형. 값 범위: 1000-01-01 00:00:00 - 9999-12-31 00:00:00 8바이트가 필요하며 숫자 YYYYMMDDHHMMSS로 저장됩니다./p>

년도- 연도를 저장할 데이터 유형입니다. 값 범위: 1901 - 2155. 1바이트를 차지합니다.

시각- 시간 저장을 위한 데이터 유형. 값 범위: -828:59:59 - 828:59:59. 3바이트를 차지합니다.

유닉스에서 날짜 번역

이제 날짜를 다음으로 변환하는 몇 가지 유용한 기능을 유닉스 타임 스탬프그리고 다시 유닉스 시간읽을 수 있는 날짜에.

현재 UNIX 시간을 얻는 방법

  • PHP:

    시각();

  • 자바스크립트:

    Math.round(new Date() .getTime() / 1000.0 ) ;

  • MySQL:

    SELECT 유닉스_타임스탬프(지금()) ;

UNIX 시간 또는 POSIX 시간(eng. Unix 시간)은 시간을 인코딩하는 편리한 방법이며 UNIX 및 기타 POSIX 호환 운영 체제에서 기본으로 채택됩니다.
시간 자체는 1969년 12월 31일부터 1970년 1월 1일까지 자정(UTC)에 시작된 Unix Epoch의 시작부터 경과된 초 단위로 기록됩니다. Unix 시간은 특히 UTC 윤초를 선언할 때 UTC와 일치합니다. 해당하는 초 숫자가 반복됩니다.

이 저장 방법은 많은 시스템에서 지원되며 매우 편리합니다. 예를 들어 날짜를 가장 가까운 초와 비교하고 저장 공간이 작고 읽을 수 있는 형식으로 쉽게 변환할 수 있습니다. 물론 월 등의 날짜 요소에 자주 접근하는 경우 등의 단점도 있습니다. 그러나 대부분의 경우 필드 집합이 아닌 단일 값으로 날짜를 저장하여 효율성을 달성합니다.

다른 "서식지" 환경에서 UnixTime 얻기:

시각
PHP시각()
루비Time.now(또는 Time.new). 출력하려면: Time.now.to_i
파이썬먼저 시간을 가져온 다음 time.time()
자바긴 에포크 = System.currentTimeMillis()/1000;
마이크로소프트 .NET C#신기원 = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VB스크립트/ASPDateDiff("s", "01/01/1970 00:00:00", Now())
얼랑달력:datetime_to_gregorian_seconds(calendar:now_to_universal_time(now()))-719528*24*3600.
MySQLSELECT unix_timestamp(지금())
PostgreSQLSELECT 추출(에포크 FROM now());
SQL 서버날짜 선택DIFF(들, "1970-01-01 00:00:00", GETUTCDATE())
자바스크립트Math.round(new Date().getTime()/1000.0) getTime()은 시간을 밀리초 단위로 반환합니다.
유닉스/리눅스날짜+%s
기타 OS명령줄: perl -e "print time"(Perl이 시스템에 설치된 경우)

일반 날짜를 UnixTime으로 변환하는 방법은 무엇입니까?

PHPmktime( 시계, , , , , 년도)
루비시간.local( 년도, , , 시계, , , 유젝) (또는 GMT/UTC 출력의 경우 Time.gm). 출력하려면 .to_i를 추가하십시오.
파이썬먼저 시간을 가져온 다음 int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S"))))
자바긴 신기원 = 새로운 java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
VB스크립트/ASPDateDiff("s", "01/01/1970 00:00:00", 날짜 필드)
MySQLSELECT 유닉스_타임스탬프( 시각) 시간 형식: YYYY-MM-DD HH:MM:SS 또는 YYMMDD 또는 YYYYMMDD
PostgreSQLSELECT extract(epoch FROM date("2000-01-01 12:34"));
타임스탬프 포함: SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE "2001-02-16 20:38:40-08"), 간격 포함: SELECT EXTRACT(EPOCH FROM INTERVAL "5일 3시간");
SQL 서버SELECT DATEDIFF(들, "1970-01-01 00:00:00", 날짜 필드)
유닉스/리눅스날짜 +%s -d"1980년 1월 1일 00:00:01"

UnixTime 초를 사람이 읽을 수 있는 날짜로 다시 변환합니다.

PHP데이트( 체재, 유닉스 시간);
루비시간.at( 유닉스 시간)
파이썬먼저 시간을 가져온 다음 time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( 유닉스 시간)) time.localtime을 GMT 날짜의 time.gmtime으로 바꿉니다.
자바문자열 날짜 = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date( 유닉스 시간*1000));
VB스크립트/ASPDateAdd("s", 유닉스 시간, "01/01/1970 00:00:00")
PostgreSQL시간대 "에포크"가 포함된 타임스탬프 선택 + 유닉스 시간* 간격 "1초";
MySQLfrom_unixtime( 유닉스 시간, 선택 사항, 출력 형식) 표준 출력 형식 YYY-MM-DD HH:MM:SS
SQL 서버DATEADD, 유닉스 시간, "1970-01-01 00:00:00")
마이크로 소프트 엑셀=(A1 / 86400) + 25569 결과는 GMT 시간대가 됩니다. 다른 시간대의 경우: =((A1 +/- 영역 차이) / 86400) + 25569.
리눅스날짜 -d@1190000000
기타 OS명령줄: perl -e "print scalar(localtime( 유닉스 시간))" (Perl이 설치된 경우) GMT/UTC 시간대의 경우 "localtime"을 "gmtime"으로 바꿉니다.

대부분의 정보는 다음에서 도난당합니다.

이 도구는 날짜를 Unix TimeStamp 형식에서 사람이 읽을 수 있는 날짜로 또는 그 반대로 변환하는 데 필요합니다.

Unix 시간이란 무엇이며 무엇에 사용됩니까?그것이 무엇에 사용되는지 이해하기 위해 다음부터 시작하겠습니다. 일반 개념, 유닉스 시간이란 무엇입니까?

유닉스 시간 (또는 러시아어로 "타임 스탬프"를 의미하고 동일한 의미를 갖는 TimeStamp) 1970년 1월 1일 이후의 초 수입니다. 즉, 1970-01-01 00:00:00 시점의 Unix TimeStamp는 0과 같았습니다. 2분(120초) 후 Unix 시간은 이미 120이었습니다. 예를 들어 하루 후(01/02 /1970 00:00:00) 60*60*24=86400초가 지났으므로 Unix 시간은 이미 86400과 같습니다. 이제 Unix 타임 스탬프는 이미 1561815370이고 초가 계속 똑딱거리면서 숫자가 계속 증가하고 있습니다.

하지만 왜 그것을 사용합니까?문제는 Unix TimeStamp가 프로그래밍할 때 날짜를 저장하고 조작하는 데 사용하는 것이 편리하다는 것입니다. 자세한 내용은 다루지 않겠지만 간단히 말해서 "왼쪽" 문자가 있는 문자열보다 숫자를 세고 비교하는 것이 훨씬 편리합니다. 그렇기 때문에 대부분의 개발자는 Unix TimeStamp를 사용하여 프로젝트의 날짜 작업을 수행하고 데이터베이스에서 '날짜' 필드에 날짜와 전혀 다른 매우 큰 숫자가 하나 있는 경우가 종종 있습니다.

이때 이 도구가 유용합니다. 이를 통해 이 "데이터베이스의 큰 숫자"를 사람이 읽을 수 있는 날짜로 쉽게 변환할 수 있습니다. 그 외에도 반대 작업을 수행하고 날짜를 Unix TimeStamp로 변환할 수도 있습니다. 다음은 이 변환기에 부여된 기능입니다.

2038년의 문제

앞서 말했듯이 번호는 유닉스 타임스탬프 1초마다 1씩 증가합니다. 조만간 이 숫자의 한계가 올 것이며 2038년이 될 것입니다. 문제는 21세기 초에 일반적으로 사용되는 32비트 운영 체제의 최대 개수는 2 31 입니다. 이것은 Unix TimeStamp가 2038년에 도달할 숫자입니다.

→ 그리고 이 문제에 대한 해결책은 이미 발견되었습니다. 사이트가 2038년에 시간에 대한 올바른 계산을 중단하지 않도록 하려면 64비트를 사용하는 것으로 충분합니다. 운영 체제 32비트가 아닌 호스트/VDS/전용 서버. 컴퓨터 용량이 빠르게 증가하고 비용이 감소함에 따라 2038년까지 사이트 공간 제공 분야의 대다수 서비스가 64비트 OS를 기반으로 제공될 것이라는 사실이 모든 것이 밝혀졌습니다. 그건 그렇고, 64 비트 시스템에서 그러한 문제는 적어도 2920 억년 동안 우리에게 영향을 미치지 않을 것입니다. 2038년의 문제해결.