1. 程式人生 > >.net下時間與時間戳之間的轉換

.net下時間與時間戳之間的轉換

   DateTime.Ticks此屬性的值表示 0001 年 1 月 1 日午夜 12:00:00 以來所經歷的 100 毫微秒隔數 (0: 00:00 年 1 月 1 日 UTC 0001,以公曆),後者表示DateTime.MinValue。 它不包括歸因於閏秒的刻度的數。
/// <summary>
/// 獲取1970-01-01至dateTime的毫秒數
/// </summary>
public long GetTimestamp(DateTime dateTime)
{
    DateTime dt = new DateTime(1970,1,1,0,0,0,0);
    return (dateTime.Ticks - dt.Ticks) / 10000
; } /// <summary> /// 根據時間戳timestamp(單位毫秒)計算日期 /// </summary> public DateTime NewDate(long timestamp) { DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0); long tt = dt.Ticks + timestamp * 10000; return new DateTime(tt); }
   呼叫:
    long lTime = long.Parse("1500521873371");
    DateTime vt=NewDate(lTime);
MessageBox.Show(vt.ToString("yyyy-MM-dd HH:mm:ss"));
由於new DateTime(1970, 1, 1, 0, 0, 0, 0).Ticks的值是固定的值(621355968000000000)不用每次去計算,上面的方法可以如下改寫:
public long GetTimestamp(DateTime dateTime)
{
    return (dateTime.Ticks - 621355968000000000) / 10000;
}

public DateTime NewDate(long timestamp)
{
    long tt = 621355968000000000 + timestamp * 10000
; return new DateTime(tt); }
   以上轉換後的時間也會是UTC的時間,目前中國的時區是東八區,可以在NewDate得到的時間加上8個小時,就變成中國的時間,也可以通過TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks 即:621356256000000000。把方法上面方法中的621355968000000000 換成 621356256000000000 轉換後的時間就是當前時區的時間。