C# DateTime 与时间戳转换
C# DateTime 与时间戳的相互转换,包括 JavaScript 时间戳和 Unix 的时间戳。
一、什么是时间戳
首先要清楚 JavaScript 与 Unix 的时间戳的区别:
JavaScript 时间戳:是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总毫秒数。
Unix 时间戳:是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数。
可以看出 JavaScript 时间戳是总毫秒数,Unix 时间戳是总秒数。
比如同样是的 2016/11/03 12:30:00,转换为 JavaScript 时间戳为 1478147400000;转换为 Unix 时间戳为 1478147400。
二、JavaScript 时间戳相互转换
1、C# DateTime 转换为 JavaScript 时间戳
// 当地时区
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
// 相差毫秒数
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds;
System.Console.WriteLine(timeStamp);
输出:1548422161362
2、JavaScript 时间戳转换为 C# DateTime
// JavaScript 时间戳
long jsTimeStamp = 1548422161362;
// 当地时区
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
DateTime dt = startTime.AddMilliseconds(jsTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));
输出:2019/01/25 21:16:01:3620
三、Unix 时间戳相互转换
1、C# DateTime 转换为 Unix 时间戳
// 当地时区
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
// 相差秒数
long timeStamp = Convert.ToInt64((DateTime.Now - startTime).TotalSeconds);
System.Console.WriteLine(timeStamp);
输出:1548422634
2、Unix 时间戳转换为 C# DateTime
// Unix 时间戳
long unixTimeStamp = 1548422634;
// 当地时区
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
DateTime dt = startTime.AddSeconds(unixTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));
输出:2019/01/25 21:23:54:0000
四、参考文献
本文并非原创,也非一味照搬,修改了原文部分内容。
原文链接:博客园 - 方木一
(完)