C# ASP MVC项目中整数与时间格式转换问题咨询
问题解析与解决方案
一、格式说明
你给出的整数是秒级Unix时间戳,它的定义是从1970年1月1日00:00:00 UTC(协调世界时)到目标时间点所经过的总秒数。你看到的对应时间是该时间戳转换为具体DateTime后的时分秒部分(日期被省略了),验证如下:
- 287779394秒 → 转换为DateTime是1979-01-18 17:39:42 UTC,时分秒为17:39:42
- 238172446秒 → 转换为DateTime是1977-07-14 14:50:57 UTC,时分秒为14:50:57
- 152830465秒 → 转换为DateTime是1974-10-09 09:28:02 UTC,时分秒为09:28:02
二、C#中将时间转换为对应整数(秒级Unix时间戳)的实现
在ASP.NET MVC项目中,可根据需求选择以下场景的实现:
1. 将本地时间转换为秒级Unix时间戳
public static long ConvertToUnixTimestamp(DateTime localTime) { DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); DateTime utcTime = localTime.ToUniversalTime(); TimeSpan timeSpan = utcTime - unixStart; return (long)timeSpan.TotalSeconds; }
2. 将UTC时间直接转换为秒级Unix时间戳
如果输入时间已是UTC时间,可跳过时区转换:
public static long ConvertUtcToUnixTimestamp(DateTime utcTime) { DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); TimeSpan timeSpan = utcTime - unixStart; return (long)timeSpan.TotalSeconds; }
3. 仅根据时分秒生成对应Unix时间戳(需指定日期)
如果只有时分秒信息,需先绑定对应日期再转换:
// 示例:生成1979-01-18 17:39:42对应的Unix时间戳 DateTime targetTime = new DateTime(1979, 1, 18, 17, 39, 42, DateTimeKind.Local); long unixTimestamp = ConvertToUnixTimestamp(targetTime); // 输出结果为287779394
注意事项
- Unix时间戳默认以UTC为基准,转换时需注意本地时间与UTC的时差,避免误差
- 若需毫秒级Unix时间戳,将代码中的
TotalSeconds替换为TotalMilliseconds即可
内容的提问来源于stack exchange,提问作者Dursun ICCAN
相关产品推荐
相关产品推荐

