关于时间戳的理解
时间戳的定义一般是指 ,即自从 Unix 纪元(格林威治时间1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
因此,理论上来说和时区无关,同一时刻不同时区计算的时间戳应该是一样的,不存在什么本地时间戳概念,
如果要将本地时间转成时间戳,就需要先将本地时间转成utc时间,然后再减去1970年1月1日
如果将时间戳转成本地时间,可以把utc1970年1月1日转成本地时间,再加上秒数
public void Test() { DateTime dt = new DateTime(2024, 2, 28); Console.WriteLine(dt); long timestamp = ToUnixTimestampForLocalTime(dt); Console.WriteLine(timestamp); DateTime dt_result = ToLocalTimeForUnixTimestamp(timestamp); Console.WriteLine(dt_result); Console.WriteLine(dt == dt_result); } /// <summary> /// /// </summary> readonly DateTime time1970 = new DateTime(1970, 1, 1); /// <summary> /// 时间戳的起始时间点的本地时间,北京时间多8个小时 /// </summary> readonly DateTime time1970_local = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); /// <summary> /// 将本地时间转成Unix时间戳 /// </summary> public long ToUnixTimestampForLocalTime(DateTime dt) { return (long)(dt.ToUniversalTime() - time1970).TotalSeconds; } /// <summary> /// 将Unix时间戳转成本地时间 /// </summary> public DateTime ToLocalTimeForUnixTimestamp(long timestamp) { return time1970_local.AddSeconds(timestamp); }
标签:
C#学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了