in reply to day of year calculation
One way to speed things up a little is to get rid of the for loop by replacing the array containing the number of days in each month with the cumulative number of days. If the year is a leap year, add 1 to the result if the month is >2.
69
70
41
41
UPDATE (for explanation): In the code I check for the month > 1 since I subtract 1 from the month in the previous line.
This gives the following output:#!/usr/local/bin/perl use strict; sub dayofyear { my ($day1,$month,$year)=@_; my @cumul_d_in_m=(0,31,59,90,120,151,181,212,243,273,304,334,365); my $doy=$cumul_d_in_m[--$month]+$day1; $doy++ if (&leap($year) && $month>1); return $doy; } sub leap { my $y = shift; return 0 unless $y % 4 == 0; return 1 unless $y % 100 == 0; return 0 unless $y % 400 == 0; return 1; } print dayofyear(10,3,2005)."\n"; print dayofyear(10,3,2004)."\n"; print dayofyear(10,2,2005)."\n"; print dayofyear(10,2,2004)."\n";
69
70
41
41
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: day of year calculation
by fglock (Vicar) on Feb 22, 2005 at 14:53 UTC |
In Section
Seekers of Perl Wisdom