2017-04-10 200 views

回答

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

A +用于使用* navy.mil *资源。 * jpl.gov *网站对于这些事情也非常有用。 –

0

您可以用date +%s --date=YYYYMMDD获得Unix的日期,并用它来compute the Julian Day from Unix date

它最终会是这样的:

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

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

+0

我使用了我们曾经使用过的久经考验的Java版本。你的看起来很整洁。当我有一些时间时,我会给它一个机会。 – Buffalo

0

in bash date +%j返回julian日期。

[[email protected] ~]# date +%j 
108 

此外,未来的Julian日期也非常简单。

[[email protected] ~]# date --date='10 days' +%j 
119 
[[email protected] ~]# date --date='2 weeks' +%j 
123 
+0

_“108”如何像JDN一样?请仔细阅读问题 – Buffalo

+0

虽然它回答了错误的问题(序号日期/日年号而不是儒略日期),但这是一个有用的小命令。以下是两者之间的区别,说明为什么只有阅读问题标题可能会产生混淆:https://en.wikipedia.org/wiki/Julian_day#Terminology – kevinmicke