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年,國(guó)際上將1s確定為全年內(nèi)每日平均長(zhǎng)度的1/8.64×104。以此標(biāo)準(zhǔn)形成的時(shí)間系統(tǒng),稱為世界時(shí)(UT1)。 1972年國(guó)際上開始使用國(guó)際原子時(shí)標(biāo),從那以后,經(jīng)過格林威治老天文臺(tái)本初子午線的時(shí)間便被稱為世界時(shí)(UT2),或稱格林威治時(shí)間(GMT),UT2是對(duì)地球轉(zhuǎn)速周期性差異進(jìn)行校正后的世界時(shí)。
(2)原子時(shí)
1967年,人們利用銫原子振蕩周期極為規(guī)律的特性,研制出了高精度的原子時(shí)鐘,將銫原子能級(jí)躍遷輻射9192631770周所經(jīng)歷的時(shí)間定為1s?,F(xiàn)在用的時(shí)間就是1971年10月定義的國(guó)際原子時(shí),是通過世界上大約200多臺(tái)原子 鐘進(jìn)行對(duì)比后,再由國(guó)際度量衡局時(shí)間所進(jìn)行數(shù)據(jù)處理,得出的統(tǒng)一的原子時(shí),簡(jiǎn)稱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的誤差。為糾正這種誤差,國(guó)際地球自轉(zhuǎn)研究所根據(jù)地球自轉(zhuǎn)的實(shí)際情況對(duì)格林威治時(shí)間進(jìn)行增減閏s的調(diào)整,與國(guó)際度量衡局時(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,另一為L(zhǎng)T(地方時(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;
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C# ping網(wǎng)絡(luò)IP 實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)檢測(cè)的方法
下面小編就為大家?guī)硪黄狢# ping網(wǎng)絡(luò)IP 實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)檢測(cè)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼
這篇文章介紹了C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼
C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼,需要的朋友可以參考一下2013-03-03
C#實(shí)現(xiàn)windows form拷貝內(nèi)容到剪貼板的方法
這篇文章主要介紹了C#實(shí)現(xiàn)windows form拷貝內(nèi)容到剪貼板的方法,涉及C#操作Clipboard的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C#服務(wù)器NFS共享文件夾搭建與上傳圖片文件的實(shí)現(xiàn)
本文主要介紹了C#服務(wù)器NFS共享文件夾搭建與上傳圖片文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
.NET利用C#字節(jié)流動(dòng)態(tài)操作Excel文件
在.NET開發(fā)中,通過字節(jié)流動(dòng)態(tài)操作Excel文件提供了一種高效且靈活的方式處理數(shù)據(jù),本文將演示如何在.NET平臺(tái)使用C#通過字節(jié)流創(chuàng)建,讀取,編輯及保存Excel文件,需要的可以參考下2024-12-12

