C# 時間戳與 標准時間互轉


C# 時間戳與 標准時間的轉其實不難,但需要注意下,基准時間的問題。

格林威治時間起點: 1970 年 1 月 1 日的 00:00:00.000

北京時間起點:1970 年 1 月 1 日的 08:00:00.000

昨天我在這里踩坑了,我用的是格林威治時間計算的時間戳,給計算機監控系統。計算機監控系統拿到時間戳換算后的時間總是跟我的對不上。后來發現是這個原因;

1.標准時間轉時間戳的方法

/// <summary>
        /// 獲取開停機的時間戳
        /// </summary>
        /// <param name="dtime"></param>
        /// <returns></returns>
        public int getTimeSpan(DateTime dtime)
        {
            //格林威治時間
            //var timeSpan_Greenwich = dtime - new DateTime(1970, 1, 1, 0, 0, 0);
            //標准北京時間
            var timeSpan = dtime - new DateTime(1970, 1, 1, 8, 0, 0);
            //或者這樣寫北京標准時間
            var timeSpan_beijing = dtime - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0));
           return (int)timeSpan.TotalSeconds;
}

 

2.時間戳轉為標准時間

        /// <summary>  
        /// 時間戳Timestamp轉換成日期  
        /// </summary>  
        /// <param name="timeStamp"></param>  
        /// <returns></returns>  
        private DateTime GetDateTime(int timeStamp)
        {
            SaveCommand("timeStamp:" + timeStamp);

            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = ((long)timeStamp * 10000000);
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime targetDt = dtStart.Add(toNow);

            if (string.IsNullOrEmpty(targetDt.ToString()))
            {
                targetDt = DateTime.Now;
            }

            SaveCommand("time:" + targetDt.ToString());

            return targetDt;
        }


 

3.TimeZone.CurrentTimeZone.ToLocalTime()方法

 這個方法將一個 DateTime 對象,獲取其值為對應於 time 的本地時間。可以看到這個方法格林威治的時間 1970-01-01 00:00:00 轉為了北京時間 1970-01-01 08:00:00

 


免責聲明!

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



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