bash - 如何获取(当前)儒略日数?
bash - how to get (current) Julian day number?
如何得到今天的 Julian day number (JDN) 等价物?或任何日期,就此而言?
我看了又看,但只找到了一些产生 "year-dayOfYear" 的函数,而不是像:2457854.
最后我自己移植了一个。这是一个 SSCCE:
#!/bin/bash
function GetJulianDay # year, month, day
{
year=
month=
day=
jd=$((day - 32075 + 1461 * (year + 4800 - (14 - month) / 12) / 4 + 367 * (month - 2 + ((14 - month) / 12) * 12) / 12 - 3 * ((year + 4900 - (14 - month) / 12) / 100) / 4))
echo $jd
}
function GetTodayJulianDay
{
year=`date +"%Y"`
month=`date +"%m"`
day=`date +"%d"`
todayJd=$(GetJulianDay $year $month $day)
echo $todayJd
}
# samples
todayJd=$(GetTodayJulianDay)
echo "got today jd: $todayJd"
yesterdayJd=$(GetJulianDay 2017 4 9)
echo "got yesterday jd: $yesterdayJd"
您可以使用 date +%s --date=YYYYMMDD
获取 Unix 日期并将其用于 compute the Julian Day from Unix date
它最终会是这样的:
echo $(( $(date +%s --date=YYYYMMDD) / 86400 + 2440587 ))
编辑:我不知道这有多重要,但有些人喜欢在转换中加 0.5。基本上这意味着如果您当前的 date/time 是在中午之后,则转换会将 Julian 日期推迟 1 天。
在 bash date +%j
returns 朱利安日期。
[root@TX-Serv-1 ~]# date +%j
108
未来的 Julian 日期也很容易。
[root@es-host01 ~]# date --date='10 days' +%j
119
[root@es-host01 ~]# date --date='2 weeks' +%j
123
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
如何得到今天的 Julian day number (JDN) 等价物?或任何日期,就此而言?
我看了又看,但只找到了一些产生 "year-dayOfYear" 的函数,而不是像:2457854.
最后我自己移植了一个。这是一个 SSCCE:
#!/bin/bash
function GetJulianDay # year, month, day
{
year=
month=
day=
jd=$((day - 32075 + 1461 * (year + 4800 - (14 - month) / 12) / 4 + 367 * (month - 2 + ((14 - month) / 12) * 12) / 12 - 3 * ((year + 4900 - (14 - month) / 12) / 100) / 4))
echo $jd
}
function GetTodayJulianDay
{
year=`date +"%Y"`
month=`date +"%m"`
day=`date +"%d"`
todayJd=$(GetJulianDay $year $month $day)
echo $todayJd
}
# samples
todayJd=$(GetTodayJulianDay)
echo "got today jd: $todayJd"
yesterdayJd=$(GetJulianDay 2017 4 9)
echo "got yesterday jd: $yesterdayJd"
您可以使用 date +%s --date=YYYYMMDD
获取 Unix 日期并将其用于 compute the Julian Day from Unix date
它最终会是这样的:
echo $(( $(date +%s --date=YYYYMMDD) / 86400 + 2440587 ))
编辑:我不知道这有多重要,但有些人喜欢在转换中加 0.5。基本上这意味着如果您当前的 date/time 是在中午之后,则转换会将 Julian 日期推迟 1 天。
在 bash date +%j
returns 朱利安日期。
[root@TX-Serv-1 ~]# date +%j
108
未来的 Julian 日期也很容易。
[root@es-host01 ~]# date --date='10 days' +%j
119
[root@es-host01 ~]# date --date='2 weeks' +%j
123
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