我的本地时区为(UTC + 10:00)堪培拉,墨尔本,悉尼日期时间 - 斯特兰奇夏令行为
周六31-MAR-2012 15:59 UTC =太阳01-APR-2012 + 02:59 11:00
周六31-MAR-2012 16:00 UTC =太阳01-APR-2012 02:00 +10:00
夏令结束在凌晨3点第一个星期天到4月和钟风回1小时。
考虑下面的代码....
DateTime dt1 = DateTime.Parse("31-Mar-2012 15:59", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal);
DateTime dt2 = DateTime.Parse("31-Mar-2012 15:59", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal).AddMinutes(1);
DateTime dt3 = DateTime.Parse("31-Mar-2012 16:00", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal);
Console.WriteLine("{0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt1);
Console.WriteLine("{0:yyyy-MMM-dd HH:mm:ss.ffff K} ({1}) = {2:yyyy-MMM-dd HH:mm:ss.ffff K} ({3})", dt2, dt2.Kind, dt3, dt3.Kind);
Console.WriteLine("{0} : {1} : {2}", dt1.ToUniversalTime().Hour, dt2.ToUniversalTime().Hour, dt3.ToUniversalTime().Hour);
我得到以下输出
2012-APR-01 02:59:00.0000 +11:00
2012-APR-01 03 :00:00.0000 10:00(本地)= 2012-APR-01 02:00:00.0000 10:00(本地)
15:17:16
添加1分钟至原始日期时间使本地时间3AM,但也将偏移设置为+10小时。 向UTC日期添加1分钟并正确解析,将本地时间设置为+10 UTC偏移量的上午2点。
与
DateTime dt1 = new DateTime(2012, 03, 31, 15, 59, 0, DateTimeKind.Utc);
DateTime dt2 = new DateTime(2012, 03, 31, 15, 59, 0, DateTimeKind.Utc).AddMinutes(1);
DateTime dt3 = new DateTime(2012, 03, 31, 16, 0, 0, DateTimeKind.Utc);
或
DateTime dt1 = DateTime.Parse("31-Mar-2012 15:59", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
DateTime dt2 = DateTime.Parse("31-Mar-2012 15:59", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal).AddMinutes(1);
DateTime dt3 = DateTime.Parse("31-Mar-2012 16:00", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
重复给出
2012-MAR-31 15:59:00.0000ž
2012-MAR-31 16:00:00.0000ž (Utc)= 2012-Mar-31 16:00:00.0000 Z(Utc)
15:16:16
预期
与
DateTime dt1 = new DateTime(2012, 03, 31, 15, 59, 0, DateTimeKind.Utc).ToLocalTime();
DateTime dt2 = new DateTime(2012, 03, 31, 15, 59, 0, DateTimeKind.Utc).ToLocalTime().AddMinutes(1);
DateTime dt3 = new DateTime(2012, 03, 31, 16, 0, 0, DateTimeKind.Utc).ToLocalTime();
再次重复给原
2012-APR-01 02:59:00.0000 +11:00
2012-APR-01 03:00: 00.0000 +10:00(当地时间)= 2012-APR-01 02:00:00.0000 +10:00(当地时间)
15:17:16
任何人都可以解释一下吗?
猥亵如果我用的TimeZoneInfo从UTC到澳大利亚东部标准时间,我得到了正确的时间进行转换,但我失去的DateTime实例作为DateTime.Kind == DateTimeKind.Unspecified
偏移信息= =突出显示的其他场景
这只是简单的时间跨度添加,从夏令时结束前1分钟开始,以UTC不明确的日期开始。
DateTime dt1 = new DateTime(2012, 03, 31, 15, 59, 0, DateTimeKind.Utc);
DateTime dt2 = new DateTime(2012, 03, 31, 15, 59, 0, DateTimeKind.Utc).ToLocalTime();
Console.WriteLine("Original in UTC : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt1);
Console.WriteLine("Original in Local : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt1.ToLocalTime());
Console.WriteLine("+ 1 Minute in Local : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt1.AddMinutes(1).ToLocalTime());
Console.WriteLine("+ 1 Minute in UTC : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt1.AddMinutes(1));
Console.WriteLine("=====================================================");
Console.WriteLine("Original in UTC : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt2.ToUniversalTime());
Console.WriteLine("Original in Local : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt2);
Console.WriteLine("+ 1 Minute in Local : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt2.AddMinutes(1));
Console.WriteLine("+ 1 Minute in UTC : {0:yyyy-MMM-dd HH:mm:ss.ffff K}", dt2.AddMinutes(1).ToUniversalTime());
给出了UTC
原文:2012-MAR-31十五点59分00秒。0000ž
原件本地:2012-APR-01 02:59:00.0000 11:00
+ 1分钟在本地:2012-APR-01 :00:00.0000 10:00
+ 1在一分钟UTC:2012-MAR-31 :00:00.0000ž
============================= ========================
原创于UTC:2012年3月31日15:59:00.0000 Z
原创地区:2012 -Apr-01 02:59:00.0000 +11:00
+ 1分钟i ñ地方:2012-APR-01 :00:00.0000 +10:00
+ 1分钟UTC:2012-MAR-31 :00:00.0000ž
日期时间不“养”的本地偏差。我只是显示当时有效的抵消。由于dt2始终处于本地时间,因此当前时刻的视图是“真实的”。 您应该使用的DateTimeOffset,如果你想随身携带的“适用”抵消http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx – IDisposable 2012-03-02 01:42:57
......如果这是真的,那么我本来可以预期在上一场景中dt2的第三个结果是03:00:00 +11:00,但它知道DST已经完成。它正确地切换到了+10:00,但并没有消除小时。 的DateTimeOffset显示的时间为03:00:00 +11:00,这不适用于我的本地时区。 – 2012-03-02 02:22:48
没有,它知道你说的这是3:00为2012/4/1,所以在那一刻偏移量是+10:00 – IDisposable 2012-03-02 03:38:43