%s을(를) 사용하여 epoch부터 현재 날짜까지의 초 수를 가져오려고 시도했지만 날짜가 잘못되었습니다.

%s을(를) 사용하여 epoch부터 현재 날짜까지의 초 수를 가져오려고 시도했지만 날짜가 잘못되었습니다.

다음 명령을 실행하려고 하면 올바른 출력이 나타납니다.

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. 단, mmm3글자(영문)의 월 이름을 나타냅니다. 확장 기능으로 대부분의 date프로그램에서는 숫자 mm/dd/yyyy (월부터)도 허용합니다.POSIX 날짜에 정의된 것과 유사합니다.mmddhhmm[[cc]yy]

Ubuntu(운영 체제)에서 기본값은 dateGNU Date이며 이 mm/dd/yyy형식이 필요합니다. 현재 다른 형식을 정의할 수 있는 방법은 없습니다(GNU coreutils 8.32).

busybox에서 사용 가능한 날짜를 사용하여 일반적인 형식을 구문 분석할 수 있습니다 . -DUbuntu에 sudo apt-get install busyboxbusybox를 설치하는 데 사용(후) 하십시오.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/20222022년 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’

관련 정보