加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – Windows XP上的DateTime.ToLocalTime

发布时间:2020-12-14 01:55:03 所属栏目:Windows 来源:网络整理
导读:.NET DateTime.ToLocalTime方法的文档说明: On Windows XP systems,the ToLocalTime method recognizes only the current adjustment rule when converting from UTC to local time. As a result, conversions for periods before the current adjustment r
.NET DateTime.ToLocalTime方法的文档说明:

On Windows XP systems,the ToLocalTime
method recognizes only the current
adjustment rule when converting from
UTC to local time. As a result,
conversions for periods before the
current adjustment rule came into
effect may not accurately reflect the
difference between UTC and local time.

我正在开发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,DateTimeKind.Utc);

    // 8 AM in December,UTC. Not DST,so 2 AM CST.
    var nonDstDate = new DateTime(2010,12,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);
}

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)上运行它,并在那里得到相同的结果.我的测试用例是否正确?任何人都可以提供结果会有所不同的情况吗?

解决方法

On Windows XP systems,the ToLocalTime
method recognizes only the current
adjustment rule when converting from
UTC to local time. As a result,
conversions for periods before the
current adjustment rule came into
effect may not accurately reflect the
difference between UTC and local time.

美国在2007年改变了夏令时的调整规则.

> 2006年:4月的第一个星期日,10月的最后一个星期日结束.
> 2007年:3月的第2个星期日,11月的第1个星期日结束.

问题在于他们遵循2007年所有日期的规则,而不仅仅是2007年之后的日期.DST规则在20年内没有改变,Windows XP在不同年份没有不同规则的概念.它将考虑2006年10月31日的夏令时,但实际上并非如此.

如果你只处理2007年之后的日期,那么你很好,不需要做任何特别的事情.如果您正在处理2006年或之前的日期,那么您需要检查年份,并手动应用DST偏移.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读