#! perl -slw use strict; use 5.010; sub EuST { state %EuST; my $year = shift; return @{ $EuST{ $year } } if exists $EuST{ $year }; my $start = 1; $start += 86400*365.25 for 1 .. ($year-1970); $start -= 86400 until scalar localtime( $start ) =~ /${ \( $year - 1 ) }/; $start += 1 until scalar localtime( $start ) =~ /$year/; $start += 59*60+59; $start += 86400*85; $start += 86400 until localtime( $start ) =~ /Apr/; $start -= 86400; $start -= 86400 until localtime( $start ) =~ /Sun/; my $end = $start + 86400 * 30 * 7; $end += 86400 until scalar localtime( $end ) =~ /Nov/; $end -= 86400; $end -= 86400 until scalar localtime( $end ) =~ /Sun/; @{ $EuST{ $year } } = ( $start, $end ); } our $YEAR //= 2013; say map{; "Epoch: $_ => ", scalar localtime( $_ ), ' ' } EuST( $YEAR ); __END__ C:\test>for /l %y in (1995,1,2013) do @EuST -YEAR=%y Epoch: 796179599 => Sun Mar 26 00:59:59 1995 Epoch: 814928399 => Sun Oct 29 01:59:59 1995 Epoch: 828233999 => Sun Mar 31 00:59:59 1996 Epoch: 846377999 => Sun Oct 27 01:59:59 1996 Epoch: 859683599 => Sun Mar 30 00:59:59 1997 Epoch: 877827599 => Sun Oct 26 01:59:59 1997 Epoch: 891133199 => Sun Mar 29 00:59:59 1998 Epoch: 909277199 => Sun Oct 25 01:59:59 1998 Epoch: 922582799 => Sun Mar 28 00:59:59 1999 Epoch: 941331599 => Sun Oct 31 01:59:59 1999 Epoch: 954032399 => Sun Mar 26 00:59:59 2000 Epoch: 972781199 => Sun Oct 29 01:59:59 2000 Epoch: 985481999 => Sun Mar 25 00:59:59 2001 Epoch: 1004230799 => Sun Oct 28 01:59:59 2001 Epoch: 1017536399 => Sun Mar 31 00:59:59 2002 Epoch: 1035680399 => Sun Oct 27 01:59:59 2002 Epoch: 1048985999 => Sun Mar 30 00:59:59 2003 Epoch: 1067129999 => Sun Oct 26 01:59:59 2003 Epoch: 1080435599 => Sun Mar 28 00:59:59 2004 Epoch: 1099184399 => Sun Oct 31 01:59:59 2004 Epoch: 1111885199 => Sun Mar 27 00:59:59 2005 Epoch: 1130633999 => Sun Oct 30 01:59:59 2005 Epoch: 1143334799 => Sun Mar 26 00:59:59 2006 Epoch: 1162083599 => Sun Oct 29 01:59:59 2006 Epoch: 1174784399 => Sun Mar 25 00:59:59 2007 Epoch: 1193533199 => Sun Oct 28 01:59:59 2007 Epoch: 1206838799 => Sun Mar 30 00:59:59 2008 Epoch: 1224982799 => Sun Oct 26 01:59:59 2008 Epoch: 1238288399 => Sun Mar 29 00:59:59 2009 Epoch: 1256432399 => Sun Oct 25 01:59:59 2009 Epoch: 1269737999 => Sun Mar 28 00:59:59 2010 Epoch: 1288486799 => Sun Oct 31 01:59:59 2010 Epoch: 1301187599 => Sun Mar 27 00:59:59 2011 Epoch: 1319936399 => Sun Oct 30 01:59:59 2011 Epoch: 1332637199 => Sun Mar 25 00:59:59 2012 Epoch: 1351385999 => Sun Oct 28 01:59:59 2012 Epoch: 1364691599 => Sun Mar 31 00:59:59 2013 Epoch: 1382835599 => Sun Oct 27 01:59:59 2013