Development Tip

Linux, Bash의 Epoch 이후 현재 시간을 초 단위로 가져옵니다.

yourdevel 2020. 10. 3. 12:04
반응형

Linux, Bash의 Epoch 이후 현재 시간을 초 단위로 가져옵니다.


과 같은 간단한 것이 필요 date하지만 현재 날짜, 시간, 분 및 초 대신 1970 이후 초 단위로 표시됩니다.

date그 옵션을 제공하지 않는 것 같습니다. 쉬운 방법이 있습니까?


이것은 작동합니다.

date +%s

추가하기 만하면됩니다.

주어진 날짜 (예 : 1973 년 10 월 21 일)에 대해 epoch (1970 년 1 월 1 일) 이후 초를 가져옵니다.

date -d "Oct 21 1973" +%s


초 수를 다시 날짜로 변환

date --date @120024000


이 명령 date은 매우 다양합니다. date로 할 수있는 또 다른 멋진 일 date --help입니다. 미국 서부 해안에서 다음 주 금요일 오전 9시에 현지 시간 표시

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

더 나은 방법은 http://man7.org/linux/man-pages/man1/date.1.html man 페이지를 읽어보십시오 .


지금까지 모든 답변은 외부 프로그램을 사용합니다 date.

배시 4.2 이후 printf새로운 개질제 갖고 %(dateformat)T, 인수와 함께 사용하면 -1주어진 포맷에 현재 날짜를 출력하는 dateformat처리, strftime(3)( man 3 strftime포맷에 대해 정보를 위해).

따라서 순수한 Bash 솔루션의 경우 :

printf '%(%s)T\n' -1

또는 결과를 변수에 저장해야하는 경우 var:

printf -v var '%(%s)T' -1

외부 프로그램과 서브 쉘이 없습니다!

Bash 4.3 이후로는 -1다음을 지정하지 않을 수도 있습니다 .

printf -v var '%(%s)T'

(그러나 -1그럼에도 불구하고 항상 주장하는 것이 현명 할 수 있습니다 ).

당신이 사용하는 경우 -2대신 인수로 -1, 배쉬 쉘 대신 현재 날짜의 시작 (그러나 당신이 원하는 왜?) 된 시간을 사용합니다.


대부분의 Awk 구현 :

awk 'BEGIN {srand(); print srand()}'

이것은 @pellucide가 수행 한 작업의 확장이지만 Mac의 경우 :

특정 날짜 (예 : 1973 년 10 월 21 일)에 대해 epoch (1970 년 1 월 1 일) 이후의 초 수를 결정합니다.

$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800

완전성을 위해 형식에 시간 부분을 추가했습니다. 그 이유는 제공 한 date날짜 부분을 취하고 제공된 값에 현재 시간을 추가하기 때문 입니다. 예를 들어 '00 : 00 : 00 '부분없이 오후 4시 19 분에 위의 명령을 실행하면 자동으로 시간이 추가됩니다. "1973 년 10 월 21 일"은 "1973 년 10 월 21 일 16:19:00"로 구문 분석됩니다. 그것은 당신이 원하는 것이 아닐 수도 있습니다.

타임 스탬프를 다시 날짜로 변환하려면 :

$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973

날짜 구현에 대한 Apple의 man 페이지 : https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html


순수한 bash 솔루션

bash5.0 ( 2019 년 1 월 7 일에 릴리스 됨) 부터 기본 제공 변수를 사용할 수 있습니다 EPOCHSECONDS.

$ echo $EPOCHSECONDS
1547624774

EPOCHREALTIME초의 일부를 포함하는 것도 있습니다 .

$ echo $EPOCHREALTIME
1547624774.371215

EPOCHREALTIME소수점을 제거하여 마이크로 초 (μs)로 변환 할 수 있습니다. 정수만 처리 할 수 bash있는의 내장 산술 (( expression ))을 사용할 때 유용 할 수 있습니다.

$ echo ${EPOCHREALTIME/./}
1547624774371215

위의 모든 예에서 인쇄 된 시간 값은 더 나은 가독성을 위해 동일합니다. 실제로 시간 값은 각 명령이 실행되는 데 약간의 시간이 걸리기 때문에 다릅니다.


이 bash 스크립트 (my ~/bin/epoch)를 사용하십시오.

#!/bin/bash

# get seconds since epoch
test "x$1" == x && date +%s && exit 0

# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH" "$@"

참고 URL : https://stackoverflow.com/questions/1092631/get-current-time-in-seconds-since-the-epoch-on-linux-bash

반응형