Shell-Script

在Unix中將日期轉換為秒

  • February 20, 2019

我有一個要求,我將以以下格式給出時間

2019-02-08T19:24:30.220Z通過這個我需要輸出給定日期和目前日期之間的天數。

給定日期 =2019-02-08T19:24:30.220Z 目前日期 =2019-02-20T19:24:30.220Z

輸出 =12

使用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

如果要將差異作為整數,則可以使用$((f(difference_in_24h_periods)))where fis one of round, floor, ceil, nearbyint, trunc, rint,就像在 C 中一樣,或者使用格式規範來指定有效位數。int``printf

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"

引用自:https://unix.stackexchange.com/questions/501818