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 时间戳
  1. // 当地时区
  2. System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
  3. // 相差毫秒数
  4. long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds;
  5. System.Console.WriteLine(timeStamp);

输出:1548422161362

2、JavaScript 时间戳转换为 C# DateTime
  1. // JavaScript 时间戳
  2. long jsTimeStamp = 1548422161362;
  3. // 当地时区
  4. System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
  5. DateTime dt = startTime.AddMilliseconds(jsTimeStamp);
  6. System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

输出:2019/01/25 21:16:01:3620

三、Unix 时间戳相互转换


1、C# DateTime 转换为 Unix 时间戳
  1. // 当地时区
  2. System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
  3. // 相差秒数
  4. long timeStamp = Convert.ToInt64((DateTime.Now - startTime).TotalSeconds);
  5. System.Console.WriteLine(timeStamp);

输出:1548422634

2、Unix 时间戳转换为 C# DateTime
  1. // Unix 时间戳
  2. long unixTimeStamp = 1548422634;
  3. // 当地时区
  4. System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
  5. DateTime dt = startTime.AddSeconds(unixTimeStamp);
  6. System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

输出:2019/01/25 21:23:54:0000

四、参考文献


本文并非原创,也非一味照搬,修改了原文部分内容。

原文链接:博客园 - 方木一

(完)