maZZoo maZZoo's blog
very low frequency tech postings  -  code/oldcalendar.writeback
    home
    blog
    feed
    eyes
    info

    code [12]
    dect [4]
    hard [8]
    meta [5]
    security [5]

Mon, 07 Mar 2005

oldcalendar.pl
in the listed years you can use old calendars from the years printed on the right:
$ ./oldcalendar.pl 2005 2020 100
2005 :  1994 1983 1977 1966 1955 1949 1938 1927 1921 1910
2006 :  1995 1989 1978 1967 1961 1950 1939 1933 1922 1911
2007 :  2001 1990 1979 1973 1962 1951 1945 1934 1923 1917 1906
2008 :  1980 1952 1924
2009 :  1998 1987 1981 1970 1959 1953 1942 1931 1925 1914
2010 :  1999 1993 1982 1971 1965 1954 1943 1937 1926 1915 1909
2011 :  1994 1983 1977 1966 1955 1949 1938 1927 1921 1910
2012 :  1984 1956 1928
2013 :  2002 1991 1985 1974 1963 1957 1946 1935 1929 1918 1907
2014 :  2003 1997 1986 1975 1969 1958 1947 1941 1930 1919 1913
2015 :  1998 1987 1981 1970 1959 1953 1942 1931 1925 1914
2016 :  1988 1960 1932
2017 :  1995 1989 1978 1967 1961 1950 1939 1933 1922 1911
2018 :  2001 1990 1979 1973 1962 1951 1945 1934 1923 1917 1906
2019 :  2002 1991 1985 1974 1963 1957 1946 1935 1929 1918 1907
2020 :  1992 1964 1936 1908
sourcecode:

#!/usr/bin/perl -w

# oldcalendar.pl [startyear] [endyear] [recentyears]
#
# prints out the years of old calenders you could use
# in startyear (def=2005) through endyear (def=2010)
# considering calenderyears [startyear-recentyears .. startyear-1]
#
# (c) 2005 Matthias Wenzel


use strict;

sub weekday($$$){
	my ($day, $month, $year) = @_;
	# see
	# http://www.tondering.dk/claus/cal/node3.html#SECTION00360000000000000000
	my $a = int( (14 - $month) / 12 );
	my $y = $year - $a;
	my $m = $month + 12 * $a - 2;
	my $d = ( $day + $y + int($y / 4) - int($y / 100) + int($y / 400) + 31 * int($m / 12) ) % 7;
	return $d;
}

my $start = 2005;
my $end   = 2010;
my $old   =   50; # dump $start - $old calenderyears

$start    = $ARGV[0] if $ARGV[0];
$end      = $ARGV[1] if $ARGV[1];
$old      = $ARGV[2] if $ARGV[2];

$end = $start if $start > $end;

my $curr=$start;
while ($curr <= $end){
	print $curr . " : ";
	my $o = $start - 1;
	while ($o ne ($start - $old)){
		if (( weekday(1,1,$curr) eq weekday(1,1,$o) ) & ( weekday(31,12,$curr) eq weekday(31,12,$o) )){
			print " " . $o;
		}
		$o--;
	}
	$curr++;
	print "\n";
}

0 writebacks

writebacks...

comment...

 
Name:
URL/Email: (optional)
Title: (optional)
Comments:
Save my Name and URL/Email for next time

validate HTML