繁体   English   中英

为什么我的本地 DateTime 没有转换为 UTC?

[英]Why isn't my local DateTime being converted to UTC?

我创建了一个本地 DateTime,其中的偏移量应该是 00:01:00(GMT 标准时间)。 但是,当转换为 UTC 时,它仅将类型指定为 UTC,而实际上并未对其进行转换。

    [Test]
    public void GivenLocalDateTime_WhenConverted_ThenBecomesUtc()
    {
        // Arrange
        var local = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Local);
        var expected = new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc);

        // Act
        var result = local.ToUniversalTime();

        // Assert
        Assert.AreEqual(DateTimeOffset.Now.Offset, TimeSpan.FromHours(1)); // Passes
        Assert.AreEqual(expected.Kind, result.Kind); // Passes
        Assert.AreEqual(expected, result); // Fails

        /*
            Expected: 2019-12-31 23:00:00
            But was:  2020-01-01 00:00:00
        */
    }

我已经尝试了几条路线。 使用时区信息...

var result = TimeZoneInfo.ConvertTimeToUtc(local, TimeZoneInfo.Local);

并将其解析为字符串...

var result = DateTime.Parse(local.ToString("O"), CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal);

这些都不起作用。 我觉得所有这些都应该有效。 我错过了什么?

这将验证您当前(八月)比 UTC 早 1 小时:

Assert.AreEqual(DateTimeOffset.Now.Offset, TimeSpan.FromHours(1)); // Passes

虽然实际测试会转换一月份的日期,但可能存在不同的 UTC 偏移量。 因此,如果您配置了 DST,则预计您的测试会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM