2017-04-10 2 views

Antwort

1

landete ich mich ein portieren. Hier ist ein 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" 

Test-it: http://aa.usno.navy.mil/data/docs/JulianDate.php

+1

A + für die Verwendung der Ressource * navy.mil *. Die * jpl.gov * Seite ist auch sehr gut für solche Dinge. –

0

Sie konnten die Unix date mit date +%s --date=YYYYMMDD bekommen und es verwenden, um compute the Julian Day from Unix date

Es wäre so etwas wie am Ende:

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

Edit: Ich weiß nicht, wie wichtig das ist, aber einige peo ple gern 0,5 zur Umwandlung hinzufügen. Grundsätzlich bedeutet dies, dass wenn Ihr aktuelles Datum/Uhrzeit nach Mittag ist, die Konvertierung das julianische Datum 1 Tag später setzen würde.

+0

Ich ging mit der bewährten Java-Version, die wir verwendet hatten. Dein Aussehen sieht viel besser aus. Ich gebe es eine Chance, wenn ich etwas Zeit habe. – Buffalo

0

in Bash date +%j gibt julian Datum zurück.

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

Auch Julian Daten in der Zukunft sind auch ziemlich einfach.

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

_How_ ähnelt "108" einem JDN? Bitte lesen Sie die Frage gründlich – Buffalo

+0

Während es die falsche Frage (Ordinal Datum/Jahr-Nummer anstelle von Julian Datum) beantwortet, ist dies ein hilfreicher kleiner Befehl. Hier ist der Unterschied zwischen den beiden, der zeigt, warum es Verwirrung geben könnte, wenn Sie nur den Titel der Frage lesen: https://en.wikipedia.org/wiki/Julian_day#Terminology – kevinmicke