先说说几个核心判断:C# 里处理时间戳转 DateTime,最坑的地方不是算法本身,而是毫秒和秒的区分,以及时区上下文。很多开发者在这上面翻过车,归根结底是没搞清楚两个基本问题——时间戳是多少位的?以及你手里那个 DateTime 的 Kind 到底对不对?

c#如何将时间戳转为日期_c#时间戳转为日期看这一篇就够了

时间戳转 DateTime 不能直接除 1000 或硬写 1970-01-01 —— C# 里必须区分毫秒级和秒级,且得用 DateTimeOffset 或校准 DateTimeKind,否则本地时区会悄悄出错。

毫秒级时间戳(常见于 Ja vaScript、C# DateTime.Now.ToUniversalTime().Ticks

毫秒级时间戳,就是那串 13 位的数字(比如 1717023600000),代表从 Unix 纪元(1970-01-01T00:00:00Z)开始算起的毫秒数。C# 里没有直接“毫秒转 DateTime”的内置函数,得手动构造。但这里有个讲究:

看个例子:

long ts = 1717023600000;
DateTimeOffset dto = DateTimeOffset.FromUnixTimeMilliseconds(ts);
DateTime utc = dto.UtcDateTime;        // 2024-05-30 07:00:00
DateTime local = dto.LocalDateTime;     // 依系统时区,如东八区 → 2024-05-30 15:00:00

秒级时间戳(常见于 Python time.time()、Linux date +%s

秒级时间戳是 10 位整数(比如 1717023600),C# 直接提供了内置支持:

示例:

long secTs = 1717023600;
DateTimeOffset dto = DateTimeOffset.FromUnixTimeSeconds(secTs);
Console.WriteLine(dto.ToString("o")); // 2024-05-30T07:00:00.0000000+00:00

DateTime 反推时间戳时,务必确认时区意图

很多人卡在“为什么我转回去的数字和原来不一样”,根源就是没搞清楚原始时间戳代表的是 UTC 还是本地时间:

注意 DateTimeOffsetDateTime 的序列化差异

Web API 或 JSON 序列化时,DateTimeOffset 默认输出带偏移(比如 "2024-05-30T07:00:00+00:00"),而 DateTimeKind 信息不会进 JSON,反序列化后很容易丢失时区上下文:

最常被忽略的一点:时间戳本身没有时区概念,但 C# 的 DateTimeKind 属性。一旦构造方式用错了,后面所有比较、格式化、序列化都会连锁出错 —— 不是数字不对,而是语义错了。

本文转载于:https://www.php.cn/faq/2344350.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。