GNU Date: 제공된 날짜/시간을 자르고 제공된 시간을 설정합니다.

GNU Date: 제공된 날짜/시간을 자르고 제공된 시간을 설정합니다.

변수에 타임스탬프 값이 있는데 그 값에서 시간을 자르고 다른 시간을 설정해야 합니다. GNU date가 이 작업을 한 번에 할 수 있나요? "오늘", "내일" 또는 "어제"와 같은 특별한 날짜에 대해서는 확실히 이 작업을 수행하지만 임의의 타임스탬프와 함께 산술을 사용하도록 할 수는 없습니다.

$ date -d"tomorrow 10:05"
Thu Jul 23 10:05:00     2020

il@mar2 ~
$ date -d"yesterday 10:05"
Tue Jul 21 10:05:00     2020

$ date -d"@1595413447"
Wed Jul 22 13:24:07     2020

il@mar2 ~
$ date -d"@1595413447 10:05"
date: invalid date '@1595413447 10:05'
# desired: Wed Jul 22 10:05:00     2020

답변1

GNU는 date타임스탬프의 추가 지정을 허용하지 않습니다.

date정보 문서 에서 :

숫자 앞에 "@"이 있으면 내부 타임스탬프(초)를 나타냅니다. 숫자에는 내부 소수점("." 또는 ",")이 포함될 수 있습니다. 내부 표현에서 지원되지 않는 초과 정밀도는 음의 무한대로 잘립니다. 이러한 숫자는 완전한 타임스탬프를 지정하므로 다른 날짜 항목과 결합할 수 없습니다.

(강조는 내 것)

예를 들어 두 번 호출해야 할 것 같습니다.

date -d "$(date -d @1595413447 +'%F 10:05')"

답변2

출력 형식의 일부로 언제든지 시간을 지정할 수 있습니다.

$ date -d @1595413447 '%a %b %e 10:05:00    %Y'
Wed Jul 22 10:05:00    2020

또는 쉘에서 더 이식성이 높습니다(GNU date종속성 방지) ksh93.

$ printf '%(%a %b %e 10:05:00    %Y)T\n' '#1595413447'
Wed Jul 22 10:05:00    2020

또한 다음을 지원 하지만 ksh93:

$ printf '%(%a %b %e %T    %Y)T\n' '#1595413447 10:05'
Wed Jul 22 10:05:00    2020

또는 zsh셸에서:

$ zmodload zsh/datetime
$ strftime '%a %b %e 10:05:00    %Y' 1595413447
Wed Jul 22 10:05:00    2020

또는 bash셸에서( 형식을 위해 bash복사되었지만 날짜 구문 분석을 위해 복사되지 않음):ksh93printf %T

$ printf '%(%a %b %e 10:05:00    %Y)T\n' 1595413447
Wed Jul 22 10:05:00    2020

관련 정보