날짜/시간을 에포크로 변환하는 방법은 무엇입니까?

날짜/시간을 에포크로 변환하는 방법은 무엇입니까?

시대를 날짜/시간으로 변환하려면 다음을 수행할 수 있음을 확인했습니다.

date -d  @1346338800 +'%Y%m%d%H%M%S'

Linux에서는 어떻게 그 반대를 수행할 수 있습니까? IE 20191027163020을 에포크 값으로 변환하시겠습니까? Python이나 다른 프로그래밍 언어 스크립트를 사용하지 않고도 수행할 수 있습니까?

답변1

Linux핵심만 있고 Q&A와는 관련이 없습니다.

busybox를 통해 구현됨 date(GNU는 date또한 유사한 옵션 구현을 고려하고 있습니다.; GNU와 busybox는 dateLinux를 커널로 사용하는 시스템에서 두 가지 일반적인 구현이며 귀하의 date -d @xxx구문을 지원한다는 것을 알고 있습니다.

$ date -D %Y%m%d%H%M%S -d 20191027163020 +%s
1572193820

ast-open을 사용하여 구현됨 date( dateast-open의 일부로 구축된 경우 내장 ksh93과 같음):

$ date -p %Y%m%d%H%M%S -d 20191027163020 +%s
1572193820

내장 strftime:zsh

$ zmodload zsh/datetime
$ strftime -r %Y%m%d%H%M%S 20191027163020
1572193820

현재 버전의 GNU를 사용하면 /supported 형식 (예 : ) date으로 변환할 수 있습니다 .-d-f2019-10-27T16:30:20

t=20191027163020
printf '%s%s-%s-%sT%s:%s:%s\n' $(printf '%s\n' "$t" | fold -w2) |
  date -f - +%s

모두 현지 시간으로 작동합니다. 시간대 오프셋이 형식에 포함되지 않으므로 모호합니다.

예를 들어, 영국 본토에서는 20191027011200이 1572138720 또는 1572135120일 수 있습니다. 왜냐하면 겨울 시간으로 전환하면 시계가 한 시간 간격으로 두 번 01:12:00을 표시하기 때문입니다.

$ date -d @1572138720 +%Y%m%d%H%M%S
20191027011200
$ date -d @1572135120 +%Y%m%d%H%M%S
20191027011200

이러한 문제를 방지하려면 항상 UTC 시간을 사용하는 것이 좋습니다(예: $TZ환경 변수를 로 설정).UTC0

답변2

일반적으로 날짜 명령( -d옵션을 사용한 구현)은 다음에서 얻을 수 있습니다.일부ISO8601 형식의 날짜 문자열(에포크 번호)입니다.

$ date -d '2019-10-27 16:30:20'
Sun 27 Oct 2019 04:30:20 PM EDT

$ busybox date -d '2019-10-27 16:30:20' +%s
1572208220

그러나 보편적인 형식의 답변을 원한다면 날짜 문자열을 작성하기 위한 특정 형식을 선언해야 합니다. 이는 -f옵션 *BSD date(-d 옵션 제외), -Doptions busybox date, ast-open 옵션 -p또는 ksh93의 변수 DATEMSK를 통해 수행할 수 있습니다 .

date -j -f %Y%m%d%H%M%S 20191027163020 +%s                            # *BSD

busybox date -D %Y%m%d%H%M%S -d 20191027163020 +%s                    # busybox

date -p %Y%m%d%H%M%S -d 20191027163020 +%s                            # ast-open

DATEMSK=/dev/fd/3 3<<<%Y%m%d%H%M%S printf "%(%s)T\n" 20191027163020   # ksh93

GNU 날짜에서는 수동으로 형식을 지정해야 합니다.

$ t=20191027163020
$ T=$(echo "$t" | sed -E 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3T\4:\5:\6/')

$ echo "$T"
2019-10-27T16:30:20

$ date -d "$T" +%s 
1572208220

관련 정보