bash - 如何获得(当前)朱利安日数?

时间:2017-04-10 07:42:46

标签: bash julian julian-date

如何获得今天的Julian day number (JDN)等价物?或者任何日期,就此而言?

我看了看,但只发现了一些产生“year-dayOfYear”的功能,而不是像:2457854。

4 个答案:

答案 0 :(得分:1)

我最终自己移植了一个。这是一个SSCCE

#!/bin/bash

function GetJulianDay # year, month, day
{
  year=$1
  month=$2
  day=$3

  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"

测试它:http://aa.usno.navy.mil/data/docs/JulianDate.php

答案 1 :(得分:1)

bash date +%j中的

返回julian日期。

[root@TX-Serv-1 ~]# date +%j
108

将来朱利安的日期也很容易。

[root@es-host01 ~]# date --date='10 days' +%j
119
[root@es-host01 ~]# date --date='2 weeks' +%j
123

答案 2 :(得分:0)

您可以使用date +%s --date=YYYYMMDD获取Unix日期并将其用于compute the Julian Day from Unix date

它最终会像:

echo $(( $(date +%s --date=YYYYMMDD) / 86400 + 2440587 ))

编辑:我不知道这有多重要,但是有些人喜欢在转换中添加0.5。基本上这意味着如果您当前的日期/时间是中午之后,转换会将Julian日期放在1天后。

答案 3 :(得分:0)

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