European rule for DST

Hi,
It could be nice to add a European (and Latvian too :slight_smile:) DST rule into /system clock dst, just a simple function like this:

day of start:  (31 - (5 * yyyy / 4 + 4) mod 7) March
day of end:   (31 - (5 * yyyy / 4 + 1) mod 7) October 
where yyyy - current year between 2000 and 2099.

I have a slight interest in this too, however, I don’t forsee this becoming a real function within RouterOS, but perhaps a user script that someone can make and distribute?

Stupid, but working solution :slight_smile: :

system script> pr
 0 name="DST" owner="Vadim" policy=read,write last-started=mar/26/2006 01:00:00 run-count=19 
   source=
     :local a [:pick [system clock get date] 7 11];
     :if ($a = 2006) do={/system clock dst set dst-start="mar/26/2006 01:00:00" dst-end="oct/29/2006 01:00:00"};
     :if ($a = 2007) do={/system clock dst set dst-start="mar/25/2007 01:00:00" dst-end="oct/28/2007 01:00:00"};
     :if ($a = 2008) do={/system clock dst set dst-start="mar/30/2008 01:00:00" dst-end="oct/26/2008 01:00:00"};
     :if ($a = 2009) do={/system clock dst set dst-start="mar/29/2009 01:00:00" dst-end="oct/25/2009 01:00:00"};
     :if ($a = 2010) do={/system clock dst set dst-start="mar/28/2010 01:00:00" dst-end="oct/31/2010 01:00:00"};
     :if ($a = 2011) do={/system clock dst set dst-start="mar/27/2011 01:00:00" dst-end="oct/30/2011 01:00:00"};
     :if ($a = 2012) do={/system clock dst set dst-start="mar/25/2012 01:00:00" dst-end="oct/28/2012 01:00:00"};
     :if ($a = 2013) do={/system clock dst set dst-start="mar/31/2013 01:00:00" dst-end="oct/27/2013 01:00:00"};
     :if ($a = 2014) do={/system clock dst set dst-start="mar/30/2014 01:00:00" dst-end="oct/26/2014 01:00:00"};
     :if ($a = 2015) do={/system clock dst set dst-start="mar/29/2015 01:00:00" dst-end="oct/25/2015 01:00:00"};
     :if ($a = 2016) do={/system clock dst set dst-start="mar/27/2016 01:00:00" dst-end="oct/30/2016 01:00:00"};
     :if ($a = 2017) do={/system clock dst set dst-start="mar/26/2017 01:00:00" dst-end="oct/29/2017 01:00:00"};
     :if ($a = 2018) do={/system clock dst set dst-start="mar/25/2018 01:00:00" dst-end="oct/28/2018 01:00:00"};
     :if ($a = 2019) do={/system clock dst set dst-start="mar/31/2019 01:00:00" dst-end="oct/27/2019 01:00:00"};
     :if ($a = 2020) do={/system clock dst set dst-start="mar/29/2020 01:00:00" dst-end="oct/25/2020 01:00:00"};
     :if ($a = 2021) do={/system clock dst set dst-start="mar/28/2021 01:00:00" dst-end="oct/31/2021 01:00:00"};
     :if ($a = 2022) do={/system clock dst set dst-start="mar/27/2022 01:00:00" dst-end="oct/30/2022 01:00:00"};
     :if ($a = 2023) do={/system clock dst set dst-start="mar/26/2023 01:00:00" dst-end="oct/29/2023 01:00:00"};
     :if ($a = 2024) do={/system clock dst set dst-start="mar/31/2024 01:00:00" dst-end="oct/27/2024 01:00:00"};
     :if ($a = 2025) do={/system clock dst set dst-start="mar/30/2025 01:00:00" dst-end="oct/26/2025 01:00:00"};
     :if ($a = 2026) do={/system clock dst set dst-start="mar/29/2026 01:00:00" dst-end="oct/25/2026 01:00:00"};
     :if ($a = 2027) do={/system clock dst set dst-start="mar/28/2027 01:00:00" dst-end="oct/31/2027 01:00:00"};
     :if ($a = 2028) do={/system clock dst set dst-start="mar/26/2028 01:00:00" dst-end="oct/29/2028 01:00:00"};
     :if ($a = 2029) do={/system clock dst set dst-start="mar/25/2029 01:00:00" dst-end="oct/28/2029 01:00:00"};
     :if ($a = 2030) do={/system clock dst set dst-start="mar/31/2030 01:00:00" dst-end="oct/27/2030 01:00:00"};
     :if ($a = 2031) do={/system clock dst set dst-start="mar/30/2031 01:00:00" dst-end="oct/26/2031 01:00:00"};
     :if ($a = 2032) do={/system clock dst set dst-start="mar/28/2032 01:00:00" dst-end="oct/31/2032 01:00:00"};
     :if ($a = 2033) do={/system clock dst set dst-start="mar/27/2033 01:00:00" dst-end="oct/30/2033 01:00:00"};
     :if ($a = 2034) do={/system clock dst set dst-start="mar/26/2034 01:00:00" dst-end="oct/29/2034 01:00:00"};
     :if ($a = 2035) do={/system clock dst set dst-start="mar/25/2035 01:00:00" dst-end="oct/28/2035 01:00:00"};
     :if ($a = 2036) do={/system clock dst set dst-start="mar/30/2036 01:00:00" dst-end="oct/26/2036 01:00:00"};
     :if ($a = 2037) do={/system clock dst set dst-start="mar/29/2037 01:00:00" dst-end="oct/25/2037 01:00:00"};
     :if ($a = 2038) do={/system clock dst set dst-start="mar/28/2038 01:00:00" dst-end="oct/31/2038 01:00:00"};
     :if ($a = 2039) do={/system clock dst set dst-start="mar/27/2039 01:00:00" dst-end="oct/30/2039 01:00:00"};
     :if ($a = 2040) do={/system clock dst set dst-start="mar/25/2040 01:00:00" dst-end="oct/28/2040 01:00:00"};
     :if ($a = 2041) do={/system clock dst set dst-start="mar/31/2041 01:00:00" dst-end="oct/27/2041 01:00:00"};
     :if ($a = 2042) do={/system clock dst set dst-start="mar/30/2042 01:00:00" dst-end="oct/26/2042 01:00:00"};
     :if ($a = 2043) do={/system clock dst set dst-start="mar/29/2043 01:00:00" dst-end="oct/25/2043 01:00:00"};
     :if ($a = 2044) do={/system clock dst set dst-start="mar/27/2044 01:00:00" dst-end="oct/30/2044 01:00:00"};
     :if ($a = 2045) do={/system clock dst set dst-start="mar/26/2045 01:00:00" dst-end="oct/29/2045 01:00:00"};
     :if ($a = 2046) do={/system clock dst set dst-start="mar/25/2046 01:00:00" dst-end="oct/28/2046 01:00:00"};


 system scheduler> pr
Flags: X - disabled 
 #   NAME                            ON-EVENT                        START-DATE  START-TIME INTERVAL             RUN-COUNT 
 0   DST                             DST                             jan/01/1970 00:00:00   52w1d6h              2
:local year [:pick [system clock get date] 7 11]
:local start-tmp (5 * $year / 4 + 4)
:local start-day (31 - ($start-tmp - ($start-tmp / 7) * 7))
:local start ("Mar/" . $start-day . "/" . $year . " " . "02:00:00")
:local end-tmp (5 * $year / 4 + 1)
:local end-day (31 - ($end-tmp - ($end-tmp / 7) * 7))
:local end ("Oct/" . $end-day . "/" . $year . " " . "02:00:00")
system clock dst set dst-start=$start
system clock dst set dst-end=$end

Since version 2.9.28:

:local year [:pick [system clock get date] 7 11]
:local start-tmp (5 * $year / 4 + 4)
:local start-day (31 - ($start-tmp - ($start-tmp / 7) * 7))
:local start ("Mar/" . $start-day . "/" . $year . " " . "02:00:00")
:local end-tmp (5 * $year / 4 + 1)
:local end-day (31 - ($end-tmp - ($end-tmp / 7) * 7))
:local end ("Oct/" . $end-day . "/" . $year . " " . "02:00:00")
system clock manual set dst-start=$start
system clock manual set dst-end=$end

well, DUH!
http://forum.mikrotik.com/t/time-zone-daylight-savings-time/8390/1