유닉스 타임 스탬프는 어떻게 생성합니까?


240

관련 질문은 "Datetime To Unix 타임 스탬프" 이지만이 질문은 더 일반적입니다.

마지막 질문 을 해결하려면 유닉스 타임 스탬프가 필요합니다 . 관심 분야는 Python, Ruby 및 Haskell이지만 다른 접근 방식도 환영합니다.

유닉스 타임 스탬프를 생성하는 가장 쉬운 방법은 무엇입니까?


얼마 전에 온라인 도구를 만들었습니다. quickhash.com/timestamp
AB 캐롤

@ABCarroll 온라인 툴이 유닉스 타임 스탬프를 제공하는 방법에 대해 자세히 설명해 주시겠습니까? 설명서 등을 첨부하십시오. 많은 데이터를 제공하는 것 같지만 목표가 무엇인지 실제로 알 수는 없습니다.
Léo Léopold Hertz 준영

gettimeofdayPOSIX 및 Linux syscall 이름 : stackoverflow.com/questions/11765301/… TODO : 왜 strace date +%d호출하지 않습니까?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

당신이 일하고 시간 범위 (예 : 분, 일, 시간)를 늘리면
Guy Thouret

답변:


472

Linux 또는 MacOS에서는 다음을 사용할 수 있습니다.

date +%s

어디

  • +%s, 1970-01-01 00:00:00 UTC 이후의 초 (GNU Coreutils 8.24 날짜 매뉴얼)

예제 출력은 이제 1454000043입니다.


1
Solaris : 트러스 날짜 2> & 1 | grep ^ 시간 | awk '{print $ 3}'
Ľubomír Mlích

BSD 날짜는 + % s도 지원합니다. datePOSIX.2에서 일반적으로 정의 된 것처럼 아마도 보편적 입니다.
Dereckson

@ ĽubomírMlích SmartOS 호스트 (SunOS 5.11 joyent_20171026T003127Z)에서 /usr/bin/date +%s and / usr / xpg4 / bin / date + % s`가 작동했습니다. POSIX.2 권장 사항과 결합하여 이것이 모든 Solaris에서도 작동한다고 생각합니다.
Dereckson

참고 : 60 초 date -v+60S +%s추가 : 1 일 추가 : date -v+24H +%s등. . .
gMale

최대 3 자리까지 밀리 초를 생성하는 방법은 무엇입니까?
Parveen Verma

110

루비에서 :

>> Time.now.to_i
=> 1248933648

레일에 사용할 수 있습니다 Time.zone.now.to_i. 비록 그것이 같은 o / p를 줄 Time.now.to)_i것이지만 Time.zone.now.to_iRails방법입니다.
스왑

Rails에서는 ./bin/rails runner "p Time.current.to_i"또 다른 솔루션입니다.
gipcompany

18

파이썬에서 타임 스탬프를 얻으려면 다음 줄을 추가하십시오.

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993

17

curl icanhazepoch.com

기본적으로 그것은 서비스로서 유닉스 타임 스탬프입니다 (UTaaS)


3
잘 했어 이를 통해 취미 사이트에 유사한 기능을 추가 할 수있었습니다. curl -L -H "Accept: application/json" unixtimesta.mp줄 것이다{"datetime":"Thu, 19 Jul 2018 12:01:21 GMT","timestamp":1532001681}
Craig Anderson


8

유닉스 'date'명령은 놀랍도록 다재다능합니다.

날짜 -j -f "% a % b % d % T % Z % Y" "`date`" "+ % s"

date-f에 의해 정의 된 형식으로 출력을 취한 다음, 에포크 (epoch) 이후 초 (+ j) 형식으로 출력합니다 (-j는 날짜 설정을 시도하지 않음).


4
date: invalid option -- 'j'
nyuszika7h

1
그것은 유닉스 표준 (POSIX)이 아닌 GNU 날짜 확장입니다.
jlliagre

8
$ date +%s.%N

where (GNU Coreutils 8.24 날짜 매뉴얼)

  • +%s, 1970-01-01 00:00:00 UTC 이후의 초
  • +%N시대 이후의 나노초 (000000000..999999999)

출력 예 1454000043.704350695. BSD 매뉴얼에 date플래그에 대한 정확한 설명이 포함되어 있지 않다는 것을 알게되었습니다 +%s.


왜 나노초를 포함 +$N합니까? 일부 시스템의 UNIX 타임 스탬프에 포함되어 있습니까?
Léo Léopold Hertz 준영

2
참고 %N로 macOS 10.13.1 (High Sierra)의 날짜에 대한 매뉴얼 페이지는 문서화되어 있지 않으며 작동하지 않습니다. 내가 얻은 샘플 출력은 다음과 같습니다 1523342391.N.
nishanths

맥 OS에있어 gdate브루의에 apple.stackexchange.com/a/135749/181223
필 pirozhkov

7

우선, 유닉스 '에포크'또는 제로 타임은 1970-01-01 00 : 00 : 00Z입니다 (줄 루어 또는 GMT 또는 UTC 시간대의 1970 년 1 월 1 일 자정을 의미). 유닉스 타임 스탬프는 윤초를 고려하지 않은 이후의 시간 (초)입니다.

Perl에서 현재 시간을 생성하는 것은 다소 쉽습니다.

perl -e 'print time, "\n"'

주어진 날짜 / 시간 값에 해당하는 시간을 생성하는 것은 다소 쉽지 않습니다. 논리적으로 strptime()POSIX 의 기능 을 사용합니다 . 그러나 Perl POSIX :: strptime 모듈 (POSIX 모듈과 별개)에는 서명이 있습니다.

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = 
                                     POSIX::strptime("string", "Format");

mktimePOSIX 모듈 의 함수 에는 서명이 있습니다.

mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)

따라서 데이터 형식을 알고 있다면 다음에 변형을 작성할 수 있습니다.

perl -MPOSIX -MPOSIX::strptime -e \
    'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'


3

하스켈

import Data.Time.Clock.POSIX

main :: IO ()
main = print . floor =<< getPOSIXTime

이동

import "time"
t := time.Unix()

에서 C

time(); // in time.h POSIX

// for Windows time.h
#define UNIXTIME(result)   time_t localtime; time(&localtime); struct tm* utctime = gmtime(&localtime); result = mktime(utctime);

에서 스위프트

NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970

2

하스켈에서 ...

POSIXTime 유형으로 다시 가져 오려면 다음을 수행하십시오.

import Data.Time.Clock.POSIX
getPOSIXTime

정수로 :

import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime

2
public static Int32 GetTimeStamp()
    {
        try
        {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
            return 0;
        }
    }

2

JavaScript를 사용해 봅시다 :

var t = Math.floor((new Date().getTime()) / 1000);

... 또는 더 나은 정적 접근 방식 :

var t = Math.floor(Date.now() / 1000);

두 경우 모두 1000초를 밀리 초로 나누기 위해 나눕니다. 나는 지난 초를 Math.floor나타냅니다 (반올림, 아직 지나지 않은 초로 반올림 할 수 있음).


이것은 잘못이다. 두 방법 모두 milliseconds초를 반환 하지 않으며 유닉스 타임 스탬프는 seconds1970 년 1 월 1 일 00:00 UTC 이후에 경과 한 수입니다 . JS를 사용할 수 있습니다. 1000으로 나누고 반올림하십시오.Math.round(Date.now()/1000)
Lukas Liesis

1
@LukasLiesis는 그 날 사전 커피 였어야 합니다. Math.floor대신에 선택했지만 답변을 업데이트했습니다 Math.round. 건배
Madbreaks

0

쉘 스크립트 (Bourne 계열 : sh, ksh, bash, zsh 등)에서 Unix 타임 스탬프가 필요한 경우 다른 제안 (perl, haskell, ruby, python, GNU 날짜)과 달리 모든 Unix 시스템에서 작동해야합니다. ), POSIX 표준 명령 및 기능을 기반으로합니다.

PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'

0

Bash 5에는 새로운 변수가 있습니다.

echo $EPOCHSECONDS

또는 더 높은 정밀도 (마이크로 초)를 원하는 경우 :

echo $EPOCHREALTIME

0

date 명령을 사용하여 utc 날짜 시간을 인쇄하려면 date 명령에 -u 인수를 사용해야합니다.

date -u

산출

Fri Jun 14 09:00:42 UTC 2019

0

nawk :

$ nawk 'BEGIN{print srand()}'
  • '' 'date + % s' ''가 구현되지 않은 이전 버전의 Solaris 및 아마도 다른 UNIX 시스템에서도 작동합니다.
  • posix 도구가 GNU 버전 (nawk-> gawk 등)으로 대체 된 Linux 및 기타 배포판에서는 작동하지 않습니다.
  • 매우 직관적이지 않지만 확실히 재미 있습니다 :-)

-1

NodeJS를 사용하여 터미널을 열고 다음을 입력하십시오.
node -e "console.log(new Date().getTime())"또는node -e "console.log(Date.now())"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.