3

I would like to convert a date/times to the Julian Date (number of days since Jan 1 4713 BCE, not the YY-ddd form where ddd is the day number of the current year). This doesn't seem to be built-in to gnudate, but I suspect it's pretty easy with the right incantation of date and bc.

I would prefer to be able to do this from the shell prompt or via a bash function rather than having to install some extra packages. Gnu-date and standard tools like sed awk bc

1
  • There are many useful variations on this but most sensibly use a scripting language, possibly with good date libraries (look into python), but since you want it with the basics one could hardly do better than to crib from here: blog.sleeplessbeastie.eu/2013/05/17/… Commented Jun 11, 2016 at 16:13

2 Answers 2

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

the mathematically

[(date in sec)-(1840-12-31 in sec)]/86400 
0

If you're only interested in dates that GNU date supports, you can make it spit out the number of seconds since 1970-01-01. Unix time uses a fixed number of seconds per day (leap seconds are smoothed out), so you can convert that number of seconds into a number of days simply by dividing by 86400. To convert that into the Julian day number, add the requisite fixed offset.

echo $(($(TZ=GMT+12 date +%s -d "now") / 86400 + 2440587))

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.