변수에 타임스탬프 값이 있는데 그 값에서 시간을 자르고 다른 시간을 설정해야 합니다. 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
복사되었지만 날짜 구문 분석을 위해 복사되지 않음):ksh93
printf %T
$ printf '%(%a %b %e 10:05:00 %Y)T\n' 1595413447
Wed Jul 22 10:05:00 2020