/// <summary> /// Assumes input is in UTC. /// </summary> /// <param name="input">The input.</param> /// <returns></returns> public static TzDateTime ConvertToTzDateTime(string input) { TzDateTime result; TzDateTime.TryParse(input, out result); return(result); }
public void DateTimeInteroperability() { // Create a UTC DateTime DateTime dtUtc = new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); // Create a UTC TzDateTime with the current time zone TzDateTime zdtUtc = new TzDateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc, TzTimeZone.CurrentTimeZone); Console.WriteLine(dtUtc); Console.WriteLine(zdtUtc); AssertUtcSame(dtUtc, zdtUtc); // Do some arithmetic operations DateTime test = dtUtc.Add(TimeSpan.FromHours(24)); //TzDateTime ztest = zdtUtc.Add(TimeSpan.FromHours(24)); }
/*public static int GetTimeZoneOffSet(string timeZoneId) * { * var utc = DateTime.UtcNow; * return Int32.Parse(GetTimeFromLocationTimeZone(timeZoneId, utc).Subtract(utc).TotalMinutes.ToString()); * } * * public static DateTime GetTimeFromLocationTimeZone(string timeZoneId, DateTime currentTime) * { * var timeZoneName = GetTimeZoneNameForLocation(locationId); * return !string.IsNullOrEmpty(timeZoneName) ? GetTimeForTimeZoneFromUtcTime(timeZoneName, currentTime) : currentTime; * }*/ public static DateTime GetTimeForTimeZoneFromUtcTime(string timeZoneName, DateTime utcTime) { if (string.IsNullOrEmpty(timeZoneName)) { return(utcTime); } var time = new DateTime(utcTime.Ticks, DateTimeKind.Utc); var zone = TzTimeZone.GetTimeZone(timeZoneName); if (zone != null) { var local = new TzDateTime(time, zone); if (local.TimeZone != null) { return(local.DateTimeLocal); } } return(utcTime); }
public void WorkItem12159_2() { // New set of bugs // =============== // Console.WriteLine("============ Zone America/Chicago (GMT-06:00) ============="); TzTimeZone zone = TzTimeZone.CurrentTimeZone; Assert.AreEqual(DateTime.UtcNow.Hour, zone.ToUniversalTime(DateTime.Now).Hour); zone = TzTimeZone.GetTimeZone(TzConstants.TimezoneAmericaChicago); Console.WriteLine("zone.StandardName: '" + zone.StandardName + "'"); Console.WriteLine("zone.GetUtcOffset(Now).TotalHours: '" + zone.GetUtcOffset(DateTime.Now).TotalHours + "'"); Console.WriteLine("DateTime.UtcNow: " + DateTime.UtcNow); Console.WriteLine("zone.ToUniversalTime(now): '" + zone.ToUniversalTime(DateTime.Now) + "'"); TzDateTime dtDate = new TzDateTime(zone.ToLocalTime(DateTime.UtcNow), zone); dtDate.DateTimeLocal = DateTime.Parse("2007-09-12 03:00"); Console.WriteLine("dtDate.DateTimeLocal = '2007-09-12 03:00'"); Console.WriteLine("zone.GetUtcOffset(dtDate).TotalHours: '" + zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours + "'"); dtDate.DateTimeLocal = DateTime.Parse("2007-12-12 03:00"); Console.WriteLine("dtDate.DateTimeLocal = '2007-12-12 03:00'"); Console.WriteLine("zone.GetUtcOffset(dtDate).TotalHours: '" + zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours + "'"); Console.WriteLine("zone.IsDaylightSavingTime(Now): '" + zone.IsDaylightSavingTime(DateTime.Now) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2007-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2007-09-15")) + "'"); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2007-09-15"))); Console.WriteLine("zone.IsDaylightSavingTime('2007-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2007-12-15")) + "'"); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2007-12-15"))); Console.WriteLine("zone.IsDaylightSavingTime('2008-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2008-09-15")) + "'"); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-09-15"))); Console.WriteLine("zone.IsDaylightSavingTime('2008-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2008-12-15")) + "'"); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-12-15"))); //Console.WriteLine("zone.IsDaylightSavingTime('2016-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2016-09-15")) + "'"); //Console.WriteLine("zone.IsDaylightSavingTime('2016-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2016-12-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('1974-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("1974-09-15")) + "'"); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("1974-09-15"))); Console.WriteLine("zone.IsDaylightSavingTime('1974-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("1974-12-15")) + "'"); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("1974-12-15"))); Console.WriteLine("--------- Converting local time to UTC -------------"); // April 2nd, 2006 2am time changes Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-01"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-02"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-03"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-02 01:00"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-02 01:59"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-02 02:00"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-04-02 02:01"))); Console.WriteLine("DST on rule <= 2006 for America/Chicago: Apr Sun>=1 2:00 (2am (8:00 UTC) becomes 3am)"); Console.WriteLine("zone.ToUniversalTime('2006-04-02 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 01:00")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2006-04-02 01:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-04-02 01:30'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 01:30")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2006-04-02 01:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-04-02 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 02:00")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2006-04-02 02:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-04-02 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 02:30")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2006-04-02 02:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-04-02 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 03:00")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2006-04-02 03:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-04-02 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 03:30")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2006-04-02 03:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-04-02 04:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-04-02 04:00")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2006-04-02 04:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-05-10 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-05-10 03:00")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2006-05-10 03:00")).Hour); // 2006 October last sun 29 at 2 am Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-28"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-29"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-30"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-29 01:00"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-29 01:59"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-29 02:00"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2006-10-29 02:01"))); Console.WriteLine("DST off rule <= 2006 for America/Chicago: Nov Sun>=1 2:00 (2am (7:00 UTC) becomes 1am)"); Console.WriteLine("zone.ToUniversalTime('2006-10-29 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-10-29 00:00")) + "'"); Assert.AreEqual(5, zone.ToUniversalTime(DateTime.Parse("2006-10-29 00:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 00:30'): '" + zone.ToUniversalTime(DateTime.Parse("2006-10-29 00:30")) + "'"); Assert.AreEqual(5, zone.ToUniversalTime(DateTime.Parse("2006-10-29 00:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-11-04 01:00")) + "'"); Assert.AreEqual(6, zone.ToUniversalTime(DateTime.Parse("2006-10-29 01:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 01:30'): '" + zone.ToUniversalTime(DateTime.Parse("2006-11-04 01:30")) + "'"); Assert.AreEqual(6, zone.ToUniversalTime(DateTime.Parse("2006-10-29 01:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-11-04 02:00")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2006-10-29 02:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2006-11-04 02:30")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2006-10-29 02:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-11-04 03:00")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2006-10-29 03:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2006-10-29 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2006-12-12 03:00")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2006-10-29 03:00")).Hour); CheckToUniversalTime(zone, "2007"); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-8"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-9"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-10"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-9 01:00"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-9 01:59"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-9 02:00"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-03-9 02:01"))); Console.WriteLine("DST on rule >= 2007 for America/Chicago: Mar Sun>=8 2:00 (2am (8:00 UTC) becomes 3am)"); Console.WriteLine("zone.ToUniversalTime('2008-03-09 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 01:00")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2008-03-09 01:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-03-09 01:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 01:30")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2008-03-09 01:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-03-09 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 02:00")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2008-03-09 02:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-03-09 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 02:30")) + "'"); Assert.AreEqual(7, zone.ToUniversalTime(DateTime.Parse("2008-03-09 02:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-03-09 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 03:00")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2008-03-09 03:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-03-09 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 03:30")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2008-03-09 03:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-03-09 04:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-09 04:00")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2008-03-09 04:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-05-10 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-05-10 03:00")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2008-05-09 03:00")).Hour); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-1"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-2"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-3"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-2 01:00"))); Assert.IsTrue(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-2 01:59"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-2 02:00"))); Assert.IsFalse(zone.IsDaylightSavingTime(DateTime.Parse("2008-11-2 02:01"))); Console.WriteLine("DST off rule >= 2007 for America/Chicago: Nov Sun>=1 2:00 (2am (7:00 UTC) becomes 1am)"); Console.WriteLine("zone.ToUniversalTime('2008-11-02 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 00:00")) + "'"); Assert.AreEqual(5, zone.ToUniversalTime(DateTime.Parse("2008-11-02 00:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-11-02 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 01:00")) + "'"); Assert.AreEqual(6, zone.ToUniversalTime(DateTime.Parse("2008-11-02 01:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-11-02 01:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 01:30")) + "'"); Assert.AreEqual(6, zone.ToUniversalTime(DateTime.Parse("2008-11-02 01:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-11-02 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 02:00")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2008-11-02 02:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-11-02 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 02:30")) + "'"); Assert.AreEqual(8, zone.ToUniversalTime(DateTime.Parse("2008-11-02 02:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-11-02 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 03:00")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2008-11-02 03:00")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-11-02 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-11-02 03:30")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2008-11-02 03:30")).Hour); Console.WriteLine("zone.ToUniversalTime('2008-12-12 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-12-12 03:00")) + "'"); Assert.AreEqual(9, zone.ToUniversalTime(DateTime.Parse("2008-12-02 03:00")).Hour); zone = PublicDomain.TzTimeZone.GetTimeZone(TzConstants.TimezoneEuropeParis); Console.WriteLine("zone = PublicDomain.TzTimeZone.GetTimeZone('Europe/Paris')"); Console.WriteLine("zone.GetUtcOffset(Now).TotalHours: '" + zone.GetUtcOffset(DateTime.Parse("2007-01-01")).TotalHours + "'"); Console.WriteLine("zone.GetUtcOffset(Now).TotalHours: '" + zone.GetUtcOffset(DateTime.Parse("2007-06-01")).TotalHours + "'"); Console.WriteLine("zone.ToUniversalTime(now): '" + zone.ToUniversalTime(DateTime.Now) + "'"); Console.WriteLine("zone.DaylightName(): '" + zone.DaylightName + "'"); Console.WriteLine("zone.GetDaylightChanges(2004).Start: '" + zone.GetDaylightChanges(2004).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2004).End: '" + zone.GetDaylightChanges(2004).End + "'"); Console.WriteLine("zone.GetDaylightChanges(2005).Start: '" + zone.GetDaylightChanges(2005).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2005).End: '" + zone.GetDaylightChanges(2005).End + "'"); Console.WriteLine("zone.GetDaylightChanges(2006).Start: '" + zone.GetDaylightChanges(2006).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2006).End: '" + zone.GetDaylightChanges(2006).End + "'"); Console.WriteLine("zone.GetDaylightChanges(2007).Start: '" + zone.GetDaylightChanges(2007).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2007).End: '" + zone.GetDaylightChanges(2007).End + "'"); Console.WriteLine("zone.GetDaylightChanges(2008).Start: '" + zone.GetDaylightChanges(2008).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2008).End: '" + zone.GetDaylightChanges(2008).End + "'"); Console.WriteLine("zone.GetDaylightChanges(2009).Start: '" + zone.GetDaylightChanges(2009).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2009).End: '" + zone.GetDaylightChanges(2009).End + "'"); Console.WriteLine("zone.GetDaylightChanges(2010).Start: '" + zone.GetDaylightChanges(2010).Start + "'"); Console.WriteLine("zone.GetDaylightChanges(2010).End: '" + zone.GetDaylightChanges(2010).End + "'"); Console.WriteLine("---------------"); dtDate = new PublicDomain.TzDateTime(zone.ToLocalTime(DateTime.UtcNow), zone); //DST dtDate.DateTimeLocal = DateTime.Parse("2007-09-12 03:00"); Console.WriteLine("dtDate.DateTimeLocal = '2007-09-12 03:00'"); Console.WriteLine("zone.GetUtcOffset(dtDate).TotalHours: '" + zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours + "'"); //Non-DST dtDate.DateTimeLocal = DateTime.Parse("2007-12-12 03:00"); Console.WriteLine("dtDate.DateTimeLocal = '2007-12-12 03:00'"); Console.WriteLine("zone.GetUtcOffset(dtDate).TotalHours: '" + zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours + "'"); //IsDaylightSavingTime Console.WriteLine("zone.IsDaylightSavingTime(Now): '" + zone.IsDaylightSavingTime(DateTime.Now) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2007-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2007-09-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2007-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2007-12-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2008-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2008-09-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2008-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2008-12-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2016-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2016-09-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('2016-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("2016-12-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('1974-09-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("1974-09-15")) + "'"); Console.WriteLine("zone.IsDaylightSavingTime('1974-12-15'): '" + zone.IsDaylightSavingTime(DateTime.Parse("1974-12-15")) + "'"); Console.WriteLine("--------- Converting local time to UTC -------------"); //ToUniversalTime around DST breaks Console.WriteLine("zone.ToUniversalTime('2007-01-25 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-01-25 00:00")) + "'"); Console.WriteLine("DST on rule for Europe/Paris: Mar lastSun 1:00u (2am (1:00 UTC) becomes 3am)"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 00:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 01:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 02:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 02:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 03:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 03:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 04:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 04:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-03-25 04:30'): '" + zone.ToUniversalTime(DateTime.Parse("2007-03-25 04:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-09-12 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-09-12 03:00")) + "'"); Console.WriteLine("DST off rule for Europe/Paris: Oct lastSun 1:00u (3am (1:00 UTC) becomes 2am)"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 00:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 01:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 01:30'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 01:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 02:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 02:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 03:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 03:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-10-28 04:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-10-28 04:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2007-12-12 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2007-12-12 03:00")) + "'"); Console.WriteLine("DST on rule for Europe/Paris: Mar lastSun 1:00u (2am (1:00 UTC) becomes 3am)"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 00:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 01:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 02:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 02:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 03:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 03:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 04:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 04:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-03-30 04:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-03-30 04:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-05-10 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-05-10 03:00")) + "'"); Console.WriteLine("DST off rule for Europe/Paris: Oct lastSun 1:00u (3am (1:00 UTC) becomes 2am)"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 00:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 00:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 01:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 01:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 01:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 01:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 02:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 02:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 02:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 02:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 03:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 03:30'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 03:30")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-10-26 04:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-10-26 04:00")) + "'"); Console.WriteLine("zone.ToUniversalTime('2008-12-12 03:00'): '" + zone.ToUniversalTime(DateTime.Parse("2008-12-12 03:00")) + "'"); Console.WriteLine("--------- Converting UTC to local time -------------"); Console.WriteLine("zone.ToLocalTime('2007-01-25 00:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-01-25 00:00")) + "'"); Console.WriteLine("DST on rule for Europe/Paris: Mar lastSun 1:00u (2am (1:00 UTC) becomes 3am)"); Console.WriteLine("zone.ToLocalTime('2007-03-25 00:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 00:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 00:30'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 00:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 01:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 01:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 01:30'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 01:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 02:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 02:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 02:30'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 02:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 03:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-03-25 04:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-03-25 04:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-09-12 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-09-12 03:00")) + "'"); Console.WriteLine("DST off rule for Europe/Paris: Oct lastSun 1:00u (3am (1:00 UTC) becomes 2am)"); Console.WriteLine("zone.ToLocalTime('2007-10-28 00:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 00:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 00:30'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 00:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 01:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 01:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 01:30'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 01:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 02:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 02:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 02:30'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 02:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 03:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-10-28 04:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-10-28 04:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2007-12-12 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2007-12-12 03:00")) + "'"); Console.WriteLine("DST on rule for Europe/Paris: Mar lastSun 1:00u (2am (1:00 UTC) becomes 3am)"); Console.WriteLine("zone.ToLocalTime('2008-03-30 00:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 00:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 00:30'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 00:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 01:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 01:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 01:30'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 01:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 02:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 02:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 02:30'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 02:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 03:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-03-30 04:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-03-30 04:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-05-10 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-05-10 03:00")) + "'"); Console.WriteLine("DST off rule for Europe/Paris: Oct lastSun 1:00u (3am (1:00 UTC) becomes 2am)"); Console.WriteLine("zone.ToLocalTime('2008-10-26 00:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 00:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 00:30'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 00:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 01:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 01:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 01:30'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 01:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 02:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 02:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 02:30'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 02:30")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 03:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-10-26 04:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-10-26 04:00")) + "'"); Console.WriteLine("zone.ToLocalTime('2008-12-12 03:00'): '" + zone.ToLocalTime(DateTime.Parse("2008-12-12 03:00")) + "'"); }
public void TestGetUtcOffset() { TzTimeZone zone = TzTimeZone.ZoneUsEastern; TzDateTime dtDate = new TzDateTime(zone.ToLocalTime(DateTime.UtcNow), zone); dtDate.DateTimeLocal = DateTime.Parse("2007-01-01 03:00"); Assert.AreEqual(-5, zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours); dtDate.DateTimeLocal = DateTime.Parse("2007-09-12 03:00"); Assert.AreEqual(-4, zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours); dtDate.DateTimeLocal = DateTime.Parse("2007-12-12 03:00"); Assert.AreEqual(-5, zone.GetUtcOffset(dtDate.DateTimeLocal).TotalHours); }
private static bool DoParse(string str, TzTimeZone localTimeZone, out TzDateTime result) { result = null; if (string.IsNullOrEmpty(str)) { throw new ArgumentNullException("str"); } Match m; int matchIndex = RegexUtilities.MatchAny(str, out m, FormatYear, FormatYearAndMonth, FormatComplete, FormatCompleteHM, FormatCompleteHMS, FormatCompleteHMSF); int year = 0, month = 1, day = 1, hours = 0, minutes = 0, seconds = 0, millisecond = 0; DateTimeKind kind = DateTimeKind.Local; TzTimeZone timezone = localTimeZone; if (matchIndex != -1) { if (matchIndex >= 0) { year = int.Parse(RegexUtilities.GetCapture(m, 1)); } if (matchIndex >= 1) { month = int.Parse(RegexUtilities.GetCapture(m, 2)); } if (matchIndex >= 2) { day = int.Parse(RegexUtilities.GetCapture(m, 3)); } if (matchIndex >= 3) { hours = int.Parse(RegexUtilities.GetCapture(m, 4)); minutes = int.Parse(RegexUtilities.GetCapture(m, 5)); // At this level, we also expect a time zone designator kind = DateTimeKind.Utc; string tzd = RegexUtilities.GetLastCapture(m, 2); if (tzd == UtcZuluIdentifier.ToString()) { timezone = TzTimeZone.ZoneUTC; } else { timezone = TzTimeZone.GetTimeZoneByOffset(RegexUtilities.GetLastCapture(m, 1)); } } if (matchIndex >= 4) { seconds = int.Parse(RegexUtilities.GetCapture(m, 6)); } if (matchIndex >= 5) { millisecond = int.Parse(RegexUtilities.GetCapture(m, 7)); } result = new TzDateTime(year, month, day, hours, minutes, seconds, millisecond, kind, timezone); return(true); } return(false); }
/// <summary> /// Tries the parse. /// </summary> /// <param name="str">The STR.</param> /// <param name="localTimeZone">The local time zone.</param> /// <param name="dateTime">The date time.</param> /// <returns></returns> public static bool TryParse(string str, TzTimeZone localTimeZone, out TzDateTime dateTime) { return(DoParse(str, localTimeZone, out dateTime)); }
private static string ConvertDateTimeToDbTimeString(DatabaseType databaseType, TzDateTime dt, bool doStringEncapsulation) { string valStr = ""; switch (databaseType) { case DatabaseType.MySql: case DatabaseType.SqlServer: case DatabaseType.PostgreSql: if (doStringEncapsulation) { valStr += "'"; } valStr += dt.DateTimeUtc.ToString("HH:mm:ss", CultureInfo.InvariantCulture); if (doStringEncapsulation) { valStr += "'"; } break; default: throw new NotImplementedException(); } return valStr; }
private static string ConvertDateTimeToDbTimeString(DatabaseType databaseType, TzDateTime dt, bool doStringEncapsulation) { string valStr = ""; switch (databaseType) { case DatabaseType.MySql: case DatabaseType.SqlServer: case DatabaseType.PostgreSql: if (doStringEncapsulation) { valStr += "'"; } valStr += dt.DateTimeUtc.ToString("HH:mm:ss", CultureInfo.InvariantCulture); if (doStringEncapsulation) { valStr += "'"; } break; default: throw new NotImplementedException(); } return(valStr); }
private static bool DoParse(string str, TzTimeZone localTimeZone, out TzDateTime result) { result = null; if (string.IsNullOrEmpty(str)) { throw new ArgumentNullException("str"); } Match m; int matchIndex = RegexUtilities.MatchAny(str, out m, FormatYear, FormatYearAndMonth, FormatComplete, FormatCompleteHM, FormatCompleteHMS, FormatCompleteHMSF); int year = 0, month = 1, day = 1, hours = 0, minutes = 0, seconds = 0, millisecond = 0; DateTimeKind kind = DateTimeKind.Local; TzTimeZone timezone = localTimeZone; if (matchIndex != -1) { if (matchIndex >= 0) { year = int.Parse(RegexUtilities.GetCapture(m, 1)); } if (matchIndex >= 1) { month = int.Parse(RegexUtilities.GetCapture(m, 2)); } if (matchIndex >= 2) { day = int.Parse(RegexUtilities.GetCapture(m, 3)); } if (matchIndex >= 3) { hours = int.Parse(RegexUtilities.GetCapture(m, 4)); minutes = int.Parse(RegexUtilities.GetCapture(m, 5)); // At this level, we also expect a time zone designator kind = DateTimeKind.Utc; string tzd = RegexUtilities.GetLastCapture(m, 2); if (tzd == UtcZuluIdentifier.ToString()) { timezone = TzTimeZone.ZoneUTC; } else { timezone = TzTimeZone.GetTimeZoneByOffset(RegexUtilities.GetLastCapture(m, 1)); } } if (matchIndex >= 4) { seconds = int.Parse(RegexUtilities.GetCapture(m, 6)); } if (matchIndex >= 5) { millisecond = int.Parse(RegexUtilities.GetCapture(m, 7)); } result = new TzDateTime(year, month, day, hours, minutes, seconds, millisecond, kind, timezone); return true; } return false; }
/// <summary> /// Tries the parse. /// </summary> /// <param name="str">The STR.</param> /// <param name="localTimeZone">The local time zone.</param> /// <param name="dateTime">The date time.</param> /// <returns></returns> public static bool TryParse(string str, TzTimeZone localTimeZone, out TzDateTime dateTime) { return DoParse(str, localTimeZone, out dateTime); }
/// <summary> /// Tries the parse. /// </summary> /// <param name="str">The STR.</param> /// <param name="dateTime">The date time.</param> /// <returns></returns> public static bool TryParse(string str, out TzDateTime dateTime) { return TryParse(str, null, out dateTime); }
private void PrintDate(DateTime dt, string tz_name) { TzTimeZone zone = TzTimeZone.GetTimeZone(tz_name); TzDateTime tzdt = new TzDateTime(dt, zone); TzDatabase.TzZone dbzone = zone.FindZone(dt); Console.WriteLine(tzdt); double utc_offset = tzdt.UtcOffset.TotalHours; double utc_std_offset = dbzone.UtcOffset.TotalHours; Console.WriteLine("utc offset : {0}", utc_offset); Console.WriteLine("utc_std offset : {0}", utc_std_offset); Console.WriteLine("local : {0}", tzdt.DateTimeLocal); Console.WriteLine("utc : {0}", tzdt.DateTimeUtc); Console.WriteLine("dst_name : {0}", zone.DaylightName); Console.WriteLine("std_name : {0}", zone.StandardName); Console.WriteLine("is dst? : {0}", zone.IsDaylightSavingTime(dt)); try { DaylightTime dst = zone.GetDaylightChanges(dt.Year); Console.WriteLine("dst_delta : {0}", dst.Delta); Console.WriteLine("dst_start : {0}", dst.Start); Console.WriteLine("dst_end : {0}", dst.End); } catch (NullReferenceException) {} Console.WriteLine(string.Empty); }
/// <summary> /// Converts the string to date time. /// </summary> /// <param name="subject">The subject.</param> /// <param name="timeZone">The time zone.</param> /// <param name="ret">The ret.</param> /// <returns></returns> public static bool ConvertStringToDateTime(string subject, TzTimeZone timeZone, out TzDateTime ret) { return TzDateTime.TryParseTz(subject, DateTimeStyles.AssumeUniversal, out ret, timeZone); }
private static void AssertUtcSame(DateTime dtUtc, TzDateTime zdtUtc) { Assert.AreEqual(dtUtc, zdtUtc.DateTimeUtc); Assert.AreNotEqual(dtUtc, zdtUtc.DateTimeLocal); }
private static string ConvertDateTimeToDbTimeString(DatabaseType databaseType, TzDateTime dt) { return(ConvertDateTimeToDbTimeString(databaseType, dt, true)); }
/// <summary> /// Converts the string to date time. /// </summary> /// <param name="subject">The subject.</param> /// <param name="timeZone">The time zone.</param> /// <param name="ret">The ret.</param> /// <returns></returns> public static bool ConvertStringToDateTime(string subject, TzTimeZone timeZone, out TzDateTime ret) { return(TzDateTime.TryParseTz(subject, DateTimeStyles.AssumeUniversal, out ret, timeZone)); }
/// <summary> /// Tries the parse. /// </summary> /// <param name="str">The STR.</param> /// <param name="dateTime">The date time.</param> /// <returns></returns> public static bool TryParse(string str, out TzDateTime dateTime) { return(TryParse(str, null, out dateTime)); }
private static string ConvertDateTimeToDbTimeString(DatabaseType databaseType, TzDateTime dt) { return ConvertDateTimeToDbTimeString(databaseType, dt, true); }