This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.
From: "Garry T. Williams" <garry@america.net> Subject: Re: date conversions... Date: Sat, 01 Jul 2000 19:18:52 -0400 At 04:23 PM 6/30/00, Kris wrote: >hello- > I'm looking for some type of algorithm or code snippet >... >So, if I convert the first date in the file to a 1 (say it's 3/30/2000) then >I need to convert 3/31/2000 to 2, and 4/1/2000 to 3, and so on. Any ideas >on how to do this? How about something like this: $ cat x #!/usr/local/bin/perl -w use strict; use Time::Local; # Everything's relative to 3/30/2000 sub MILE_STONE () { timelocal(0, 0, 0, 30, 2, 100); } my @some_dates = qw( 3/30/2000 3/31/2000 4/1/2000 4/2/2000 4/3/2000 6/1/2000 11/30/2000 12/1/2000 ); sub relative_date { my $date = shift; my ($m, $d, $y) = split(m!/!, $date); my $rel = timelocal(0, 0, 0, $d, $m-1, $y-1900); $rel = ($rel - MILE_STONE)/(24*60*60) + 1; # Round because of DST return(sprintf("%.0f", $rel)); } foreach ( @some_dates ) { print relative_date($_), "\n"; } __END__ $ perl x 1 2 3 4 5 64 246 247 $ Hope this helps. -Garry Williams Path: nntp.stanford.edu!not-for-mail From: Steve Revilak <srevilak@cs.umb.edu> Newsgroups: comp.lang.perl.moderated,comp.lang.perl Subject: Re: date conversions... Date: Sat, 1 Jul 2000 19:32:22 -0400 (EDT) Lines: 30 === From: hans-georg@rist.net (Hans-Georg Rist) Subject: Re: date conversions... Date: Tue, 04 Jul 2000 21:15:02 GMT On Fri, 30 Jun 2000 14:23:18 -0600, "Kris" <kaweed@micron.com> wrote: > I'm looking for some type of algorithm or code snippet (even an idea of >a direction to go in) on creating a numerical list from a dated list. I'm >using a plotting program to plot some dates, but it won't accept dates in >the format I have. So what I need to do is convert each date into a number. >So, if I convert the first date in the file to a 1 (say it's 3/30/2000) then >I need to convert 3/31/2000 to 2, and 4/1/2000 to 3, and so on. Any ideas >on how to do this? The other problem I have is that there are often >re-ocurring dates and they aren't all in order, so I need all instances of >4/1/2000 throughout the file to be a 3. Any ideas? Use Julian dates: sub j_date { # Arguments: year, month (1=Jan, 2=Feb, ... 12=Dec), day (1...31) # Returns: Julian date (days since 1.1.4713 B.C.) # Algorithm: R. G. Tantzen my( $year, $month, $day ) = @_; my( $c, $y ); if ( $month > 2 ) { $month -= 3; } else { $month += 9; $year--; } $day += int( ( 153 * $month + 2 ) / 5 ); $c = int( ( 146097 * int( $year / 100 ) ) / 4 ); $y = int( ( 1461 * ( $year % 100 ) ) / 4 ); return( $c + $y + $day + 1721119 ); } # end sub j_date() HTH, HG -- Hans-Georg Rist hans-georg@rist.net