2017-04-10 90 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