C# 時(shí)間與時(shí)間戳互轉(zhuǎn)的方法(13位)
目前經(jīng)常出現(xiàn)的時(shí)間有三個(gè):
- 本地時(shí)間(locale time)
- 格林威治時(shí)間(Greenwich Mean Time GMT)
- 時(shí)間協(xié)調(diào)時(shí)間 (Universal Time Coordinated UTC)
時(shí)間標(biāo)準(zhǔn):
(1)世界時(shí)
世界時(shí)是最早的時(shí)間標(biāo)準(zhǔn)。在1884年,國際上將1s確定為全年內(nèi)每日平均長度的1/8.64×104。以此標(biāo)準(zhǔn)形成的時(shí)間系統(tǒng),稱為世界時(shí)(UT1)。 1972年國際上開始使用國際原子時(shí)標(biāo),從那以后,經(jīng)過格林威治老天文臺本初子午線的時(shí)間便被稱為世界時(shí)(UT2),或稱格林威治時(shí)間(GMT),UT2是對地球轉(zhuǎn)速周期性差異進(jìn)行校正后的世界時(shí)。
(2)原子時(shí)
1967年,人們利用銫原子振蕩周期極為規(guī)律的特性,研制出了高精度的原子時(shí)鐘,將銫原子能級躍遷輻射9192631770周所經(jīng)歷的時(shí)間定為1s。現(xiàn)在用的時(shí)間就是1971年10月定義的國際原子時(shí),是通過世界上大約200多臺原子 鐘進(jìn)行對比后,再由國際度量衡局時(shí)間所進(jìn)行數(shù)據(jù)處理,得出的統(tǒng)一的原子時(shí),簡稱TAI。
(3)世界協(xié)調(diào)時(shí)
世界協(xié)調(diào)時(shí)是以地球自轉(zhuǎn)為基礎(chǔ)的時(shí)間標(biāo)準(zhǔn)。由于地球自轉(zhuǎn)速度并不均勻,并非每天都是精確的86400原子s,因而導(dǎo)致了自轉(zhuǎn)時(shí)間與世界時(shí)之間存在18個(gè)月有1s的誤差。為糾正這種誤差,國際地球自轉(zhuǎn)研究所根據(jù)地球自轉(zhuǎn)的實(shí)際情況對格林威治時(shí)間進(jìn)行增減閏s的調(diào)整,與國際度量衡局時(shí)間所聯(lián)合向全世界發(fā)布標(biāo)準(zhǔn)時(shí)間,這就是所謂的世界協(xié)調(diào)時(shí)(UTC:CoordinatdeUniversalTime)。UTC的表示方式為:年(y)、月(m)、日(d)、時(shí)(h)、分(min)、秒(s),均用數(shù)字表示。
GPS 系統(tǒng)中有兩種時(shí)間區(qū)分,一為UTC,另一為LT(地方時(shí))兩者的區(qū)別為時(shí)區(qū)不同,UTC就是0時(shí)區(qū)的時(shí)間,地方時(shí)為本地時(shí)間,如北京為早上八點(diǎn)(東八區(qū)),UTC時(shí)間就為零點(diǎn),時(shí)間比北京時(shí)晚八小時(shí),以此計(jì)算即可
通過上面的了解,我們可以認(rèn)為格林威治時(shí)間就是時(shí)間協(xié)調(diào)時(shí)間(GMT=UTC),格林威治時(shí)間和UTC時(shí)間均用秒數(shù)來計(jì)算的。
/// <summary> /// 獲取時(shí)間戳 /// </summary> /// <returns></returns> public static string GetTimeStamp(System.DateTime time) { long ts = ConvertDateTimeToInt(time); return ts.ToString(); } /// <summary> /// 將c# DateTime時(shí)間格式轉(zhuǎn)換為Unix時(shí)間戳格式 /// </summary> /// <param name="time">時(shí)間</param> /// <returns>long</returns> public static long ConvertDateTimeToInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)); long t = (time.Ticks - startTime.Ticks) / 10000; //除10000調(diào)整為13位 return t; } /// <summary> /// 時(shí)間戳轉(zhuǎn)為C#格式時(shí)間 /// </summary> /// <param name=”timeStamp”></param> /// <returns></returns> private DateTime ConvertStringToDateTime(string timeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(timeStamp + "0000"); TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); }
/// <summary> /// 時(shí)間戳 /// </summary> public class TimeHelp { /// <summary> /// 獲取時(shí)間戳 /// </summary> /// <returns></returns> public static string GetTimeStamp(System.DateTime time,int length=13) { long ts = ConvertDateTimeToInt(time); return ts.ToString().Substring(0,length); } /// <summary> /// 將c# DateTime時(shí)間格式轉(zhuǎn)換為Unix時(shí)間戳格式 /// </summary> /// <param name="time">時(shí)間</param> /// <returns>long</returns> public static long ConvertDateTimeToInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)); long t = (time.Ticks - startTime.Ticks) / 10000; //除10000調(diào)整為13位 return t; } /// <summary> /// 時(shí)間戳轉(zhuǎn)為C#格式時(shí)間 /// </summary> /// <param name=”timeStamp”></param> /// <returns></returns> public static DateTime ConvertStringToDateTime(string timeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(timeStamp + "0000"); TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); } /// <summary> /// 時(shí)間戳轉(zhuǎn)為C#格式時(shí)間10位 /// </summary> /// <param name="timeStamp">Unix時(shí)間戳格式</param> /// <returns>C#格式時(shí)間</returns> public static DateTime GetDateTimeFrom1970Ticks(long curSeconds) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); return dtStart.AddSeconds(curSeconds); } /// <summary> /// 驗(yàn)證時(shí)間戳 /// </summary> /// <param name="time"></param> /// <param name="interval">差值(分鐘)</param> /// <returns></returns> public static bool IsTime(long time, double interval) { DateTime dt = GetDateTimeFrom1970Ticks(time); //取現(xiàn)在時(shí)間 DateTime dt1 = DateTime.Now.AddMinutes(interval); DateTime dt2 = DateTime.Now.AddMinutes(interval * -1); if (dt > dt2 && dt < dt1) { return true; } else { return false; } } /// <summary> /// 判斷時(shí)間戳是否正確(驗(yàn)證前8位) /// </summary> /// <param name="time"></param> /// <returns></returns> public static bool IsTime(string time) { string str = GetTimeStamp(DateTime.Now,8); if (str.Equals(time)) { return true; } else { return false; } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C#使用SQL DataReader訪問數(shù)據(jù)的優(yōu)點(diǎn)和實(shí)例
欄 目:C#教程
下一篇:C#使用SQL DataAdapter數(shù)據(jù)適配代碼實(shí)例
本文標(biāo)題:C# 時(shí)間與時(shí)間戳互轉(zhuǎn)的方法(13位)
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5040.html
您可能感興趣的文章
- 01-10C#通過重寫Panel改變邊框顏色與寬度的方法
- 01-10C#實(shí)現(xiàn)實(shí)體類與字符串互相轉(zhuǎn)換的方法
- 01-10Extjs4如何處理后臺json數(shù)據(jù)中日期和時(shí)間
- 01-10WinForm實(shí)現(xiàn)程序一段時(shí)間不運(yùn)行自動(dòng)關(guān)閉的方法
- 01-10C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)
- 01-10C#計(jì)算程序執(zhí)行過程花費(fèi)時(shí)間的方法
- 01-10時(shí)間戳與時(shí)間相互轉(zhuǎn)換(php .net精確到毫秒)
- 01-10基于C#實(shí)現(xiàn)簡單離線注冊碼生成與驗(yàn)證
- 01-10C#開發(fā)中的垃圾回收機(jī)制簡析
- 01-10C#編程實(shí)現(xiàn)對象與JSON串互相轉(zhuǎn)換實(shí)例分析


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery