C# 時間戳(TimeStamp)與時間(DateTime)的互相轉換


  什么是時間戳:時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。

  時間戳在線轉換網址:https://tool.lu/timestamp,時間戳的轉換網址有很多,經常用的還有站長工具。

下附代碼,在控制台中粘貼在啟動類即可使用,需引用(using System)命名空間 ;

/// <summary>
/// 取時間戳,高並發情況下會有重復。想要解決這問題請使用sleep線程睡眠1毫秒。
/// </summary>
/// <param name="AccurateToMilliseconds">精確到毫秒</param>
/// <returns>返回一個長整數時間戳</returns>
public static long GetTimeStamp(bool AccurateToMilliseconds = false)
{
if (AccurateToMilliseconds)
{

// 使用當前時間計時周期數(636662920472315179)減去1970年01月01日計時周期數(621355968000000000)除去(刪掉)后面4位計數(后四位計時單位小於毫秒,快到不要不要)再取整(去小數點)。

//備注:DateTime.Now.ToUniversalTime不能縮寫成DateTime.Now.Ticks,會有好幾個小時的誤差。

//621355968000000000計算方法 long ticks = (new DateTime(1970, 1, 1, 8, 0, 0)).ToUniversalTime().Ticks;

return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000; 

}
else
{

//上面是精確到毫秒,需要在最后除去(10000),這里只精確到秒,只要在10000后面加三個0即可(1秒等於1000毫米)。
return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}
}

/// <summary>
/// 時間戳反轉為時間,有很多中翻轉方法,但是,請不要使用過字符串(string)進行操作,大家都知道字符串會很慢!
/// </summary>
/// <param name="TimeStamp">時間戳</param>
/// <param name="AccurateToMilliseconds">是否精確到毫秒</param>
/// <returns>返回一個日期時間</returns>
public static DateTime GetTime(long TimeStamp, bool AccurateToMilliseconds = false)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
if (AccurateToMilliseconds)
{
return startTime.AddTicks(TimeStamp * 10000);
}
else
{
return startTime.AddTicks(TimeStamp * 10000000);
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM