gpt4 book ai didi

C# 纪元日期时间转换

转载 作者:行者123 更新时间:2023-12-04 14:15:45 25 4
gpt4 key购买 nike

我需要在 C# 中使用纪元时间,为此我创建了以下两个扩展方法:

public static DateTime ToDateTime(this double epochTime)
{
return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(epochTime);
}

public static double ToEpochTime(this DateTime dt)
{
var t = dt - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return t.TotalSeconds;
}

我在运行以下测试时失败了:

[Fact]
public void Test_EpochTime()
{
var dateToTest = DateTime.Now;

var epoch = dateToTest.ToEpochTime();
var result = epoch.ToDateTime();

Assert.Equal(result, dateToTest);
}

结果是:

Xunit.Sdk.EqualException: 'Assert.Equal() Failure

Expected: 2020-03-02T17:43:19.1830000Z

Actual: 2020-03-02T17:43:19.1831870+00:00'

有没有人以前遇到过这种情况,在 double/DateTime 之间转换时出现问题?

提前感谢您的指点!

最佳答案

double 只有足够的精度来保持到毫秒。如果您想要更精确,则必须使用很长的 DateTime.Ticks。 long 是一个精确的值,它不会改变。

如果你想要毫秒,那么正如@Magnetron 指出的那样,有内置的方法。最重要的是,这是一般性建议,如果您需要精确值,请不要使用 double 或浮点类型。

关于C# 纪元日期时间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60494296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com