前言
參考博客
C#獲取和轉換時間戳:
https://blog.csdn.net/weixin_39885282/article/details/79462443
獲取時間戳:
https://www.cnblogs.com/xiangxisheng/p/12364423.html
Convert.ToInt64(Double):
示例
獲取時間戳
關於Ticks和TimeSpan
使用過程中發現了一個問題,TimeSpan獲取的10位和13位時間戳有時候會存在差異。
建議使用Ticks去整除得到時間戳。
原因:Convert.ToInt64(Double),對小數的保留規則導致數據會有偏差
使用Ticks
static void Test7() { //1970-01-01的Ticks值 long tStart = 621355968000000000; //方法1,直接相減 long ts1 = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks; //方法2,將當前時間轉換為Utc時間,再減 long ts2 = DateTime.Now.ToUniversalTime().Ticks - tStart; //方法3,直接獲取當前Utc時間,再減 long ts3 = DateTime.UtcNow.Ticks - tStart; var ret1 = ts1 / 10000000; var ret2 = ts1 / 10000; Console.WriteLine(ret1);//10位 Console.WriteLine(ret2);//13位 }
運行結果
使用TimeSpan
/// <summary> /// 獲取時間戳,TimeSpan /// </summary> static void Test6() { //1970-01-01的Ticks值 long tStart = 621355968000000000; //方法1,直接相減 TimeSpan ts1 = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); //方法2,將當前時間轉換為Utc時間,再減 TimeSpan ts2 = new TimeSpan(DateTime.Now.ToUniversalTime().Ticks - tStart); //方法3,直接獲取當前Utc時間,再減 TimeSpan ts3 = new TimeSpan(DateTime.UtcNow.Ticks - tStart); var ret1 = Convert.ToInt64(ts1.TotalSeconds); var ret2 = Convert.ToInt64(ts1.TotalMilliseconds); Console.WriteLine(ret1);//10位 Console.WriteLine(ret2);//13位 }
運行結果
轉換時間戳
static void Test8() { long ret1 = 1593488038; long ret2 = 1593488038297; var ret10 = ret1 * 10000000; var ret20 = ret2 * 10000; DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); TimeSpan ts1 = new TimeSpan(ret10); var dt1 = dtStart.Add(ts1); TimeSpan ts2 = new TimeSpan(ret20); var dt2 = dtStart.Add(ts2); Console.WriteLine(dt1.ToString("yyyy-MM-dd HH:mm:ss.ffff")); Console.WriteLine(dt2.ToString("yyyy-MM-dd HH:mm:ss.ffff")); }
運行結果