다음 명령을 실행하려고 하면 올바른 출력이 나타납니다.
date --date="04/1/2022 7:1:00" +'%s'
output: 1648776660
그러나 다른 날짜(2022년 1월 29일)로 동일한 명령어를 실행하려고 하면 잘못된 날짜가 표시됩니다.
date --date="29/1/2022 7:1:00" +'%s'
error: date: invalid date ‘29/1/2022 7:1:00’
첫 번째 부분을 생각하는 데 한 달이 걸리기 때문인가요? 이 상황을 어떻게 처리해야 할까요 %s
?
29일이 달이고 날짜가 유효하지 않은 것으로 간주하기 때문입니다. dd-mm-yyyy hh:mm:ss를 다른 날짜 형식으로 변환하여 %s를 추가하고 초를 얻을 수 있는 방법이 있습니까? 어떤 제안이라도 부탁드립니다
답변1
(GNU) 기본 입력 형식 date
은 이메일 날짜 형식입니다(읽기RFC5322). 이 형식은 원래 다음에서 정의되었습니다.RFC-822처럼 dd mmm yy
. 단, mmm
3글자(영문)의 월 이름을 나타냅니다. 확장 기능으로 대부분의 date
프로그램에서는 숫자 mm/dd/yyyy
(월부터)도 허용합니다.POSIX 날짜에 정의된 것과 유사합니다.mmddhhmm[[cc]yy]
Ubuntu(운영 체제)에서 기본값은 date
GNU Date이며 이 mm/dd/yyy
형식이 필요합니다. 현재 다른 형식을 정의할 수 있는 방법은 없습니다(GNU coreutils 8.32).
busybox에서 사용 가능한 날짜를 사용하여 일반적인 형식을 구문 분석할 수 있습니다 . -D
Ubuntu에 sudo apt-get install busybox
busybox를 설치하는 데 사용(후) 하십시오.sudo apt-get update -y
$ busybox date -D '%d/%m/%Y %H:%M:%S' --date='04/1/2022 7:1:00'
Tue Jan 4 07:01:00 IST 2022
귀하가 인도에 있다고 가정합니다(IST 시간 또는 +5:30).
물론 출력 형식을 지정하면 +'%s'
에포크 이후의 초 수를 알 수 있습니다. 이는 UTC 시간이 아닌 IST 시간을 제공합니다.
$ busybox date -D '%d/%m/%Y %H:%M:%S' --date='04/1/2022 7:1:00 +0530' +'%s'
1641259860
$ date -ud @1641259860
Tue 04 Jan 2022 01:31:00 AM UTC
시대가 어떻게 다른지 주목하세요!
다른 경우(인도 시간 아님) 다음을 통해 결과를 재현할 수 있습니다.
$ TZ='Asia/Kolkata' busybox date -D '%d/%m/%Y %H:%M:%S' --date='04/1/2022 7:1:00' +'%s'
1641259860
-j
일부 BSD 날짜 구현에서는 및 -f
옵션을 사용할 수 있습니다 .유사한 결과.
$ date -j -f "%d/%m/%Y %T" "04/1/2022 7:1:00" +"%s"
1641259860
답변2
이것은 와는 아무 관련이 없습니다 +%s
. 형식을 date
구문 분석할 수 있습니까 ?dd/mm/yyyy
(맨 페이지는 설정 값을 지정하지 않습니다 LC_TIME
).
위의 에포크 샘플에서
LC_TIME=C date -d@1648776660
Fri Apr 1 03:31:00 CEST 2022
1월 4일이나 4월 1일에 시험을 보셨나요? (그리고 시간이 7:1:00과 일치하지 않습니다)
내 추측으로는 이 날짜가 29/1/2022
2022년 3월 1일로 해석되는 것 같습니다.
편집: --debug
옵션을 사용하여 확인됨
$ date --debug --date="29/01/2022 7:1:00" +'%s'
date: warning: value 29 has less than 4 digits. Assuming MM/DD/YY[YY]
date: parsed date part: (Y-M-D) 2022-29-01
date: parsed time part: 07:01:00
date: input timezone: system default
date: using specified time as starting value: '07:01:00'
date: error: invalid date/time value:
date: user provided time: '(Y-M-D) 2022-29-01 07:01:00'
date: normalized time: '(Y-M-D) 2024-05-01 07:01:00'
date: ---- --
date: possible reasons:
date: numeric values overflow;
date: missing timezone
date: invalid date ‘29/01/2022 7:1:00’