Converting YYYYMMDD to Julian


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Converting YYYYMMDD to Julian
# 1  
Old 04-27-2005
Converting YYYYMMDD to Julian

I am writing some PERL code (and I realize this is a UNIX forum), but was wondering if anyone has a quick routine (PERL or shell scripting) to take a date in YYYYMMDD format and return the 3 digit Julian number.

For instance, my program will have a variable called "$Settlement_Date" and will contain a value like this: "20050422", and I would like it to return a new variable with the value "112".

Any help or insight would be appreciated.
# 2  
Old 04-27-2005
Sorry, actually need to TAKE a 3 digit julian and convert it to YYYYMMDD format. Original post was stated incorrectly.
# 3  
Old 04-27-2005
something to start with:
Code:
#!/bin/ksh
#-----------------------------------------------------------------------------
# Date manipulation routines - convering to Julian and back
#
# Julian Day Number from calendar date
date2julian() #  year month day
{
  typeset year=$1;  typeset month=$2;  typeset day=$3
  tmpmonth=$((12 * year + month - 3))
  tmpyear=$((tmpmonth / 12))
  print $(( (734 * tmpmonth + 15) / 24 -  2 * tmpyear + \
    tmpyear/4 - tmpyear/100 + tmpyear/400 + day + 1721119 ))
}

# Calendar date from Julian Day Number
julian2date() # julianday
{
  #set -x
  typeset tmpday=$(($1 - 1721119))
  typeset centuries=$(( (4 * tmpday - 1) / 146097))
  tmpday=$((tmpday + centuries - centuries/4))
  typeset year=$(( (4 * tmpday - 1) / 1461))
  tmpday=$((tmpday - (1461 * year) / 4))
  typeset month=$(( (10 * tmpday - 5) / 306))
  day=$((tmpday - (306 * month + 5) / 10))
  month=$((month + 2))
  year=$((year + month/12))
  month=$((month % 12 + 1))
  printf "%s %02d %02d" $year $month $day
}

# Day of week, Monday=1...Sunday=7
dow() # year month day
{
  print $(( $(date2julian $1 $2 $3) % 7 + 1))
}

This User Gave Thanks to vgersh99 For This Post:
# 4  
Old 04-28-2005
I'm probably just being stupid, but what am I doing wrong? Here is the code and the result I am getting out. Trying to pass in Julian Date of 112 to have it return 20050422...

#! /usr/bin/ksh

# Calendar date from Julian Day Number
julian2date()
{
#set -x
typeset tmpday=$(($1 - 1721119))
typeset centuries=$(( (4 * tmpday - 1) / 146097))
tmpday=$((tmpday + centuries - centuries/4))
typeset year=$(( (4 * tmpday - 1) / 1461))
tmpday=$((tmpday - (1461 * year) / 4))
typeset month=$(( (10 * tmpday - 5) / 306))
day=$((tmpday - (306 * month + 5) / 10))
month=$((month + 2))
year=$((year + month/12))
month=$((month % 12 + 1))
printf "%s %02d %02d" $year $month $day
}

julian2date 112


[U]RESULT:[/U]

/home/rsd9/xxgvlqr> test.ksh
-4711 -8 -15/home/rsd9/xxgvlqr>
# 5  
Old 04-28-2005
Date arithmetic is covered in our faq section. You might want to look at that.
# 6  
Old 04-28-2005
this seems to work ok for me - you might want to look into FAQ as well [as suggested by Perderabo:
Code:
#!/bin/ksh

# Calendar date from Julian Day Number
julian2date()
{
typeset tmpday=$(($1 - 1721119))
typeset centuries=$(( (4 * tmpday - 1) / 146097))
tmpday=$((tmpday + centuries - centuries/4))
typeset year=$(( (4 * tmpday - 1) / 1461))
tmpday=$((tmpday - (1461 * year) / 4))
typeset month=$(( (10 * tmpday - 5) / 306))
day=$((tmpday - (306 * month + 5) / 10))
month=$((month + 2))
year=$((year + month/12))
month=$((month % 12 + 1))
printf "%s %02d %02d" $year $month $day
}

date2julian() #  year month day
{
  typeset year=$1;  typeset month=$2;  typeset day=$3
  typeset tmpmonth=$((12 * year + month - 3))
  typeset tmpyear=$((tmpmonth / 12))
  print $(( (734 * tmpmonth + 15) / 24 -  2 * tmpyear + \
  tmpyear/4 - tmpyear/100 + tmpyear/400 + day + 1721119 ))
}


printf "today->[2005 4 29] julian->[%d]\n" $(date2julian 2005 4 29)
printf "and back from julian->[%s %s %s]\n" $(julian2date $(date2julian 2005 4 29))

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Addition to Julian date

Need assistance . Below code gets me julian date . I wanted to add hour/24 to julian date and output it. Is there a way to do the calculation? use Time::Local; use POSIX qw(strftime); my $time=timelocal(1,2,3,9,11,2013); printf strftime "%j", localtime($time); 343 (3 Replies)
Discussion started by: ajayram_arya
3 Replies

2. Shell Programming and Scripting

Issue in Julian date conversion

All, I am facing an issue with julian date conversion.. current command: echo `date +%Y%j` `cat -n /home/user/FILENAME.dat |awk '{printf "%08s", $2}'` The above command is working good. But in the above bolded part, it is converting system date to julian date. However I want to... (8 Replies)
Discussion started by: cmaroju
8 Replies

3. Shell Programming and Scripting

Converting filenames from julian day to yyyy-mm-dd and retrieving weekly mean values

Hi, I need help to convert the filenames of my 9-year daily files (1999-2007) from a julian day to yyyy-mm-dd format. my original files are patterned likes the ones below. 1999001.txt 1999002.txt 1999003.txt 1999004.txt ... 1999365.txt desired output: 19990101.txt 19990102.txt... (3 Replies)
Discussion started by: ida1215
3 Replies

4. Shell Programming and Scripting

Converting Date from YYYYMMDD to DD-MON-YYYY

Hi , I need to convert date from YYYYMMDD to DD-MON-YYYY e.g 20111214 to 14-Dec-2011 Please help. (17 Replies)
Discussion started by: ady_koolz
17 Replies

5. Shell Programming and Scripting

What do this Julian Date Syntax explains about?

I want to know, what exactly this Julian Date Function is all about? #!/usr/bin/ksh #Script That notify the User Expiration in Servers function juliandate { day=$1 month=$2 year=$3 ((standard_jd = day - 32075 + 1461 * (year + 4800 - (14 - month)/12)/4 + 367 * (month -... (3 Replies)
Discussion started by: baraghun
3 Replies

6. Homework & Coursework Questions

How to approach Julian date?

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: This function is given the day, month and year and returns the Julian date. The Julian date is the... (1 Reply)
Discussion started by: mgyeah
1 Replies

7. Shell Programming and Scripting

need help using find and date (julian)

I'm trying to put together a little script that will move some files to a directory, uncompress the file then delete the file when processing is complete. The files are all named using julian date 2009072.Z 2009071.Z 2009070.Z 2009069.Z 2009068.Z 2009067.Z 2009066.Z 2009065.Z... (8 Replies)
Discussion started by: 1buckeye_fan
8 Replies

8. UNIX for Dummies Questions & Answers

How to get yesterdays julian date

Hi, Was using date +%Y%j to get current julian date. Can anyone let me know how can I get y'day's julin date. Thx Did check FAQ but couldn't find anything. Thanks. (3 Replies)
Discussion started by: er_ashu
3 Replies

9. Shell Programming and Scripting

Julian Dates and the Cal command

hey all, I was wondering if it was possible to get the julian date with the cal command. I know that the "-j" option will display it, however, i need the Julian Date of a specific date, in number. For example, the User would enter their age like 19800101 or YYYMMDD, like so. This info... (0 Replies)
Discussion started by: shan2on
0 Replies

10. Shell Programming and Scripting

Julian Date

I have a shell script which gets passed a parameter which is a combination of Year and Julian Date <YYYYj>. So April 11th, julian date is 101. So if I wanted April 11th for 2003 I would get the following value 2003101. How would I convert that in unix to be 20030411? I am using the korn shell. (3 Replies)
Discussion started by: lesstjm
3 Replies
Login or Register to Ask a Question