[Mono-dev] why does DateTime.Now.IsDaylightSavingTime() returns false when it should be true.

Alistair Bush alistair.bush at gmail.com
Mon Oct 28 06:35:26 UTC 2013


I am trying to figure out why exactly running
DateTime.Now.IsDaylightSavingTIme() returns false.
I live in the Auckland/Pacific timezone and pretty much everywhere I
look it confirms that yes it is daylight saving time.

Jump to [1] if you want to see what my system looks like.

I have been able to track down the issue I believe to somewhere either
in ical.c ( ves_icall_System_CurrentSystemTimeZone_GetTimeZoneData to
be exact) or CurrentSystemTimeZone. Or potentially a combo of both?

icall GetTimeZoneData seems to be returning its data in the incorrect
order.  I have attempted to confirm for a <+13GMT southern hemisphere
timezone (TZ="Australia/Sydney") but the results seem to suggest that
using TZ isn't supported.  I am therefore unable to determine whether
this is for +13GMT specifically or for some other reason.

Basically I have writing the following unit test to confirm the data
coming from ical_...GetTimeZoneData.

{code}
        delegate bool GetTimeZoneDataInternal (int year, out Int64[]
data, out string[] names);

        GetTimeZoneDataInternal getTimeZoneData;

        [Test]
        public void GetTimeZoneData() {
            TimeZone t = TimeZone.CurrentTimeZone;

            getTimeZoneData =
(GetTimeZoneDataInternal)Delegate.CreateDelegate
(typeof(GetTimeZoneDataInternal),
                t.GetType ().GetMethod ("GetTimeZoneData",
BindingFlags.NonPublic | BindingFlags.Static |
BindingFlags.InvokeMethod));

            long[] data = null;
            string[] names = null;

            var result = getTimeZoneData (2013, out data, out names);

            Assert.IsTrue (result);
        }
{/code}

The names variable contains [ "NZDT", "NZST"  ] while data contains [
635009004000000000, 635160168000000000, 468000000000, -36000000000 ].
 This is interesting as per the documentation of this method "data[3]:
 additional offset when daylight saving (in TimeSpan ticks).".
According to this function, in NZ we jump backwards into daylight
savings.

Sadly my experience with timezone calculations is limited, my C is
poor and with a weath of knowledge out here it is far to easy to ask.

Does anyone have a clue what is going on here?

Any help would be appreciated.

Thanks.


[1]
$ cat /etc/gentoo-release
Gentoo Base System release 2.2
$ date +%Z
NZDT
$ mono --version
Mono Runtime Engine version 3.2.3 (branch-master/a57f9ce Sun Oct 20
00:18:37 NZDT 2013)
Copyright (C) 2002-2013 Novell, Inc, Xamarin Inc and Contributors.
www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            sgen


More information about the Mono-devel-list mailing list