UNIX中日期与秒的转换

UNIX中日期与秒的转换

我有一个要求,我将以下面的格式给出时间

2019-02-08T19:24:30.220Z通过这个我需要输出给定日期和当前日期之间的天数。

给定日期 =2019-02-08T19:24:30.220Z 当前日期 =2019-02-20T19:24:30.220Z

输出=12

答案1

ksh93通常默认安装在基于商业 SysV 的 unice 上,例如 AIX 或 Solaris),这也恰好是/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"

相关内容