#!/usr/bin/perl # # NAME OF SCRIPT FILE: # date1900 # # DESCRIPTION # Converts the day number since 1 Jan 1900 to a date in form YYMMDD, # YYYY-MM-DD, or using the "date" command options. # # Parameters are: # -dash print output in YYYY-MM-DD format. This takes precedence # over the -o formats. # -o "format" print output in the "date" command output format. # day day number since 1900-01-00, # (i.e., day 1 is 1900-01-01) # # USAGE: # date1900 [-dash | -o "format"] day # # HISTORY: # 1992-10-27:nash:written # 1995-08-10:nash:added -dash parameter # 1996-12-05:nash:added -o parameter # $Header: /var/local/src/tmp/date1900,v 1.3 1996/12/06 15:39:26 root Exp $ # require 'newgetopt.pl'; # parse options $message = "\ndate1900 [-dash | -o 'format'] day\n\n". " Converts the day number since 1 Jan 1900 to a date in form YYMMDD,\n". " YYYY-MM-DD, or using the 'date' command options.\n\n". "Parameters are:\n". " -dash print output in YYYY-MM-DD format. This takes precedence\n". " over the -o formats.\n". " -o 'format' print output in the 'date' command output format.\n". " day day number since 1900-01-00,\n". " (i.e., day 1 is 1900-01-01)\n\n"; die $message unless (&NGetOpt("dash","h","o=s") && (@ARGV) && (!$opt_h)); # get year $year = int(int($ARGV[0])/365.25); # residual gives day of year $res = int($ARGV[0])-$year*365-int(($year-1)/4); # set up beginning index of month for leap year $leap=(($year-int($year/4)*4 == 0) & ($year != 0)); if ($res > 334+$leap) { $mo = 12; $dy = $res-334-$leap; } elsif ($res > 304+$leap) { $mo = 11; $dy = $res-304-$leap; } elsif ($res > 273+$leap) { $mo = 10; $dy = $res-273-$leap; } elsif ($res > 243+$leap) { $mo = 9; $dy = $res-243-$leap; } elsif ($res > 212+$leap) { $mo = 8; $dy = $res-212-$leap; } elsif ($res > 181+$leap) { $mo = 7; $dy = $res-181-$leap; } elsif ($res > 151+$leap) { $mo = 6; $dy = $res-151-$leap; } elsif ($res > 120+$leap) { $mo = 5; $dy = $res-120-$leap; } elsif ($res > 90+$leap) { $mo = 4; $dy = $res-90-$leap; } elsif ($res > 59+$leap) { $mo = 3; $dy = $res-59-$leap; } elsif ($res > 31) { $mo = 2; $dy = $res-31; } else { $mo = 1; $dy = $res; } # result in YYYY-MM-DD format if (defined($opt_dash)) { $add = ($year > 99); $year = $year-100*$add; print 19+$add,'0' x ($year < 10),$year,"-",'0' x ($mo < 10),$mo, "-",'0' x ($dy < 10),$dy."\n"; } # result in the 'date' command output format elsif ($opt_o ne "") { chop ($today = `day1900`); $diff = $ARGV[0]-$today; # if ($diff >= 0) { $diff = "+".$diff; } $diff = ('+' x ($diff >= 0)).$diff; chop ($today = `date`); $command = "mdate $diff ".'"'.$today.'" "'.$opt_o.'"'; print `$command`; } # result in YYMMDD format else { print '0' x ($year < 10),$year,'0' x ($mo < 10),$mo,'0' x ($dy < 10),$dy, "\n"; } exit;