[英]Why DateTime.Now and DateTime.UtcNow Isn't My Current Local DateTime?
[英]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.