Unix時間戳轉換成C#中的DateTime


先交代一下應用場景:我們的軟件需要做一個簡單的有效期驗證保護。初始的想法是

在本地將安裝時間、啟動時間、當前時間做比較,為了防止記錄被修改,記錄在注冊表的特殊的地方並加密。

我使用了.net自帶的rsa加密方法;這樣一來,帶來了一些麻煩,首先我必須存儲公鑰,私鑰用來加密和解密(解決這個問題時,我采用了相當蠢的辦法,我把他們跟時間記錄在一起);第二我還得處理因為公私鑰可能被改變而引起的異常;當然還有360攔截寫入注冊表的異常。總之,麻煩一堆。

所幸,后端的同學提供了一個服務,查詢當前的Unix時間戳。於是有了這個問題。

 1 //
 2 // Unix時間戳(timestamp)轉換成當地時間的方法
 3 // timestamp轉成double后,擴大10000000倍,轉成long,得到ltime
 4 // ltime是從格林威治時間的計時起點(1970-01-01 00:00:00)到現在的時間間隔,轉成TimeSpan,得到ts
 5 // 計算格林威治的計時起點轉成當地時間的DateTime,得到glwzStart
 6 // 用glwzStart加上時間間隔ts,得到當前的當地時間
 7 //
 8 double dtime = double.TryParse(time, out dtime) ? dtime : 0;
 9 long ltime = (long)(dtime * 10000000);
10 TimeSpan ts = new TimeSpan(ltime);
11 DateTime glwzStart = TimeZone.CurrentTimeZone.ToLocalTime(DateTime.Parse("1970-1-1 00:00:00"));
12 DateTime cur = glwzStart.Add(ts);
13 if (cur >= DateTime.Parse(ExpirationDate))
14     return 1;
15 else
16     return 0;

 


免責聲明!

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



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