UNIX에서 날짜와 초 변환

UNIX에서 날짜와 초 변환

다음 형식으로 시간을 제공해야 하는 요구 사항이 있습니다.

2019-02-08T19:24:30.220Z이를 통해 주어진 날짜와 현재 날짜 사이의 일수를 출력해야 합니다.

주어진 날짜 = 2019-02-08T19:24:30.220Z 현재 날짜 =2019-02-20T19:24:30.220Z

출력 =12

답변1

( ksh93일반적으로 AIX 또는 Solaris와 같은 상용 SysV 기반 unice에 기본적으로 설치됨) 이는 /bin/shSolaris 11 이상에서도 발생합니다.

date=2019-02-08T19:24:30.220Z
export LC_ALL=C # to make sure the decimal radix is "."
then_in_seconds=$(printf '%(%s.%N)T\n' "$date")
now_in_seconds=$(printf '%(%s.%N)T\n' now)
difference_in_seconds=$((now_in_seconds - then_in_seconds))
difference_in_24h_periods=$((difference_in_seconds / 24 / 60 / 60))
echo "Result: $difference_in_24h_periods"

2019-02-20T11:17:30Z에 이것은 나에게 다음을 제공합니다:

Result: 11.6618110817684377

차이가 정수가 되도록 하려면 C 에서와 같이 $((f(difference_in_24h_periods)))where 을 , , , , 중 하나를 사용하거나 f형식 사양을 사용하여 유효 자릿수를 지정할 수 있습니다.roundfloorceilnearbyinttruncrintintprintf

그리고 zsh:

zmodload zsh/datetime
date=2019-02-08T19:24:30.220Z
TZ=UTC0 strftime -rs then_in_seconds '%Y-%m-%dT%H:%M:%S' "${date%.*}"
then_in_seconds+=.${${date##*.}%Z}
now_in_seconds=$EPOCHREALTIME
difference_in_seconds=$((now_in_seconds - then_in_seconds))
difference_in_24h_periods=$((difference_in_seconds / 24 / 60 / 60))
echo "Result: $difference_in_24h_periods"

관련 정보