Tru*_*ill 5 .net timezone datetime windows-xp utc
.NET DateTime.ToLocalTime方法的文档指出:
在Windows XP系统上,ToLocalTime方法仅在从UTC转换为本地时将识别当前调整规则.因此,在当前调整规则生效之前的时段的转换可能无法准确反映UTC与本地时间之间的差异.
我正在开发Windows 7,但部署到混合环境.如何提供与ToLocalTime的Windows 7行为相匹配的一致,正确的实现?
编辑
我跑了一个测试:
static void Main()
{
// 8 AM in July, UTC. That would have been DST, so 3 AM CDT.
var dstDate = new DateTime(2010, 7, 1, 8, 0, 0, DateTimeKind.Utc);
// 8 AM in December, UTC. Not DST, so 2 AM CST.
var nonDstDate = new DateTime(2010, 12, 1, 8, 0, 0, DateTimeKind.Utc);
Log("DST Date ToLocalTime: " + dstDate.ToLocalTime());
Log("DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(dstDate));
Log("Expected: 3 AM July 1 2010");
Log(string.Empty);
Log("Non-DST Date ToLocalTime: " + nonDstDate.ToLocalTime());
Log("Non-DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(nonDstDate));
Log("Expected: 2 AM December 1 2010");
Log(string.Empty);
Log("Date ToLocalTime Kind: " + dstDate.ToLocalTime().Kind);
Log("Date ConvertTimeFromUtc Kind: " + ConvertTimeFromUtc(dstDate).Kind);
}
private static void Log(string message)
{
Console.WriteLine(message);
}
private static DateTime ConvertTimeFromUtc(DateTime utcDateTime)
{
return
DateTime.SpecifyKind(
TimeZoneInfo.ConvertTimeFromUtc(
utcDateTime,
TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)),
DateTimeKind.Local);
}
Run Code Online (Sandbox Code Playgroud)
XP Pro 32位,SP3(作为VM)和Windows 7 Enterprise 64位的结果相同:
DST Date ToLocalTime: 7/1/2010 3:00:00 AM DST Date ConvertTimeFromUtc: 7/1/2010 3:00:00 AM Expected: 3 AM July 1 2010 Non-DST Date ToLocalTime: 12/1/2010 2:00:00 AM Non-DST Date ConvertTimeFromUtc: 12/1/2010 2:00:00 AM Expected: 2 AM December 1 2010 Date ToLocalTime Kind: Local Date ConvertTimeFromUtc Kind: Local
文档错了吗?我可以简单地拨打ToLocalTime吗?
编辑2
我们在一个真正的XP系统(不是VM)上运行它,并在那里得到相同的结果.我的测试用例是否正确?任何人都可以提供结果会有所不同的情况吗?
在Windows XP系统上,ToLocalTime方法仅在从UTC转换为本地时将识别当前 调整规则.因此,在当前调整规则生效之前的时段的转换可能无法准确反映UTC与本地时间之间的差异.
美国在2007年改变了夏令时的调整规则.
问题在于他们遵循2007年所有日期的规则,而不仅仅是2007年之后的日期.DST规则在20年内没有改变,Windows XP在不同年份没有不同规则的概念.它将考虑2006年10月31日的夏令时,但实际上并非如此.
如果你只处理2007年之后的日期,那么你很好,不需要做任何特别的事情.如果您正在处理2006年或之前的日期,那么您需要检查年份,并手动应用DST偏移.
归档时间: |
|
查看次数: |
540 次 |
最近记录: |