Unix时间戳转DateTime异常求助:传入1663869600得1970年日期
问题原因及解决方案
问题出在时间戳单位不匹配:你传入的1663869600是秒级Unix时间戳(对应2022-09-22),但你的代码全部用了毫秒级的转换方法,导致计算时把秒当成毫秒处理——数值缩小了1000倍,最终得到的是1970年初期的错误日期。
修正后的代码示例
方法一:改用秒级转换API
DateTime start = DateTimeOffset.FromUnixTimeSeconds(request.StartTime).DateTime; var startUtc = DateTime.SpecifyKind(start, DateTimeKind.Utc);
方法二:改用AddSeconds方法
DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var startUtc = dtDateTime.AddSeconds(request.StartTime).ToLocalTime();
额外提示
Unix时间戳分两种类型:
- 秒级:10位数字,范围对应1970-01-01到2038年左右
- 毫秒级:13位数字,范围对应1970-01-01到2286年左右
转换时一定要根据时间戳的位数和定义选择对应方法。
内容的提问来源于stack exchange,提问作者Vadim Tregubenko
相关产品推荐
相关产品推荐

