Merge pull request #783 from alistair/timezoneinfo_fix_for__convert_utc_to_local
authorMarek Safar <marek.safar@gmail.com>
Sat, 19 Oct 2013 15:34:26 +0000 (08:34 -0700)
committerMarek Safar <marek.safar@gmail.com>
Sat, 19 Oct 2013 15:34:26 +0000 (08:34 -0700)
Bug 15373: Return Local DateTime instead of Unspecified for >net_4_0

mcs/class/System.Core/System/TimeZoneInfo.cs
mcs/class/System.Core/Test/System/TimeZoneInfoTest.cs

index 1f580d76d8e43def476cb66357d0f66d2566fd92..5663e4b9bb3ed25dc25f65136bce65185de9c48b 100644 (file)
@@ -1,3 +1,4 @@
+
 /*
  * System.TimeZoneInfo
  *
@@ -285,10 +286,17 @@ namespace System
 
                        if (this == TimeZoneInfo.Utc)
                                return DateTime.SpecifyKind (dateTime, DateTimeKind.Utc);
-
+                       
                        //FIXME: do not rely on DateTime implementation !
-                       if (this == TimeZoneInfo.Local)
+                       if (this == TimeZoneInfo.Local) 
+                       {
+#if NET_4_0
+                               return dateTime.ToLocalTime ();
+#else
                                return DateTime.SpecifyKind (dateTime.ToLocalTime (), DateTimeKind.Unspecified);
+#endif
+                       }
+
 
                        AdjustmentRule rule = GetApplicableRule (dateTime);
                
index 609c6d20cf705aa49c7bd27d767a6f611f65084a..89b4ec11d2ad88cb94fced541c14b552789ad33c 100644 (file)
@@ -387,6 +387,23 @@ namespace MonoTests.System
                
                        }
 
+
+                       [Test]
+                       public void ConvertFromToLocal ()
+                       {
+                               DateTime utc = DateTime.UtcNow;
+                               Assert.AreEqual(utc.Kind, DateTimeKind.Utc);
+                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc(utc, TimeZoneInfo.Local);
+                       #if NET_4_0
+                               Assert.AreEqual(DateTimeKind.Local, converted.Kind);
+                       #else
+                               Assert.AreEqual(DateTimeKind.Unspecified, converted.Kind);
+                       #endif
+                               DateTime back = TimeZoneInfo.ConvertTimeToUtc(converted, TimeZoneInfo.Local);
+                               Assert.AreEqual(back.Kind, DateTimeKind.Utc);
+                               Assert.AreEqual(utc, back);
+                       }
+
                        [Test]
                        public void ConvertToTimeZone ()
                        {