You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确转换Unix时间戳为DateTime?转换结果不符问题咨询

解决Unix时间戳转DateTime的时区偏差问题

看起来你的问题出在时区基准上!Unix时间戳的定义是从UTC时间1970年1月1日00:00:00开始的秒数,但你的代码里new DateTime(1970, 1, 1)默认创建的是本地时区的DateTime实例,这就导致后续计算出的时间和预期的UTC/目标时区时间出现偏移。

你得到的24/03/2018 23:00:00,说明你的本地时区比UTC晚1小时(比如UTC-1时区),而你预期的应该是UTC时间的25/03/2018 00:00:00或者对应你本地时区的正确时间。

下面是几种正确的实现方式:

1. 转换为UTC时间(推荐,符合Unix时间戳定义)

如果你的预期是UTC时间,直接使用DateTime.UnixEpoch(.NET Core 2.0+、.NET Framework 4.6+支持),它本身就是UTC基准的1970-01-01:

public static DateTime UnixTimeStampToUtcDateTime(long unixTimeStamp)
{
    DateTime utcDateTime = DateTime.UnixEpoch;
    utcDateTime = utcDateTime.AddSeconds(unixTimeStamp);
    return utcDateTime;
}

用这个方法转换1521932400,会得到2018-03-25 00:00:00(UTC时间),这是该时间戳对应的标准时间。

2. 转换为本地时区时间

如果需要得到你本地时区的正确时间,可以先转成UTC时间,再调用ToLocalTime():

public static DateTime UnixTimeStampToLocalDateTime(long unixTimeStamp)
{
    DateTime utcDateTime = DateTime.UnixEpoch.AddSeconds(unixTimeStamp);
    return utcDateTime.ToLocalTime();
}

这样转换后,会根据你系统的本地时区自动调整,比如如果你的时区是UTC+8,结果会是2018-03-25 08:00:00。

3. 兼容旧版本.NET Framework(4.5及以下)

如果你的项目用的是较旧的.NET Framework,没有DateTime.UnixEpoch,可以显式指定DateTimeKind.Utc来创建基准时间:

public static DateTime UnixTimeStampToUtcDateTime(long unixTimeStamp)
{
    DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    dtDateTime = dtDateTime.AddSeconds(unixTimeStamp);
    return dtDateTime;
}

验证你的时间戳

1521932400对应的标准UTC时间确实是2018-03-25 00:00:00,你之前得到的24/03/2018 23:00:00是UTC-1时区的本地时间,这也侧面验证了时区是问题的核心。

内容的提问来源于stack exchange,提问作者54566

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:40