立即将 unixtime 转换为 DateTime

Vad*_*nko 1 c#

将 unixtime 转换为 DateTime 时出现问题。

我传入参数 1663869600,这是 22 年 9 月 22 日。但在代码中,在检测后,我得到日期 1/20/1970 6:11:09 AM。

这是为什么 ?

我将通过以下方式转换日期:

DateTime start = DateTimeOffset.FromUnixTimeMilliseconds(request.StartTime).DateTime;
var startUtc = DateTime.SpecifyKind(start, DateTimeKind.Utc);
Run Code Online (Sandbox Code Playgroud)

DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var startUtc = dtDateTime.AddMilliseconds(request.StartTime).ToLocalTime();
Run Code Online (Sandbox Code Playgroud)

Dim*_*kos 6

Unix时间是自纪元以来的秒数(而不是毫秒)(正如@Gus正确提到的那样)。所以解决方案是使用FromUnixTimeSeconds代替FromUnixTimeMillisecondsAddSeconds代替AddMilliseconds

DateTime start = DateTimeOffset.FromUnixTimeSeconds(1663869600).DateTime;
var startUtc = DateTime.SpecifyKind(start, DateTimeKind.Utc);

DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var startUtc2 = dtDateTime.AddSeconds(1663869600).ToLocalTime();
Run Code Online (Sandbox Code Playgroud)