![将日期/时间转换为当前 JDN](https://linux22.com/image/8710/%E5%B0%86%E6%97%A5%E6%9C%9F%2F%E6%97%B6%E9%97%B4%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%BD%93%E5%89%8D%20JDN.png)
我想将日期/时间转换为儒略日期(自公元前 4713 年 1 月 1 日以来的天数,而不是 YY-ddd 形式,其中 ddd 是当年的天数)。这似乎不是 gnudate 内置的,但我怀疑使用正确的date
and咒语会很容易bc
。
我希望能够从 shell 提示符或通过 bash 函数来执行此操作,而不必安装一些额外的软件包。 Gnu-date 和标准工具,例如 sed awk bc
答案1
OLD_JULIAN_VAR=$(date -u -d 1840-12-31 +%s)
TODAY_DATE=`date --date="$odate" +"%Y-%m-%d"`
TODAY_DATE_VAR=`date -u -d "$TODAY_DATE" +"%s"`
export JULIAN_DATE=$((((TODAY_DATE_VAR - OLD_JULIAN_VAR))/86400))
echo $JULIAN_DATE
数学上的
[(date in sec)-(1840-12-31 in sec)]/86400
答案2
如果您只对 GNU 日期支持的日期感兴趣,您可以让它显示自 1970-01-01 以来的秒数。 Unix 时间每天使用固定的秒数(闰秒被平滑掉),因此您只需除以 86400 即可将该秒数转换为天数。要将其转换为儒略日数,请添加必要的固定抵消。
echo $(($(TZ=GMT+12 date +%s -d "now") / 86400 + 2440587))