【发布时间】:2021-12-23 11:42:33
【问题描述】:
我有以下失败的单元测试
[Fact]
public void Convert_to_and_from_unix_timestamp()
{
// Arrange
var timestamp = 1636579063;
var date = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
// Act
var unixTimeSeconds = ((DateTimeOffset)date).ToUnixTimeSeconds();
// Assert
Assert.Equal(expected: timestamp, actual: unixTimeSeconds);
// result
// Expected: 1636579063 // 10/11/2021 21:17:43
// Actual: 1636575463 // 10/11/2021 20:17:43
}
新的(实际的)Unix 时间戳是负一小时。我的机器时区是 UTC+1。这是否意味着 DateTimeOffset 会自动将我的时区 (UTC+1) 设置为日期时间,并且在转换回时间戳时 DateTimeOffset 正在删除 UTC+1,因此会减少一小时?如何以两种方式管理时区?
【问题讨论】:
-
是的。 DateTime 和 DateTimeOffset 之间的转换应用本地时区。见stackoverflow.com/a/37258500/1132334
-
这能回答你的问题吗? Remove Time Zone Offset from DateTimeOffset?
-
var date = DateTimeOffset.FromUnixTimeSeconds(timestamp).UtcDateTime;,注意UtcDateTime而不是DateTime