欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#時(shí)間戳基本使用方法詳解

 更新時(shí)間:2022年10月20日 13:17:22   作者:Kilven_ck  
這篇文章主要給大家介紹了關(guān)于C#時(shí)間戳基本使用方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

時(shí)間戳轉(zhuǎn)換:

由于TimeZone類已經(jīng)過(guò)時(shí),官方推薦使用TimeZoneInfo來(lái)做時(shí)間的轉(zhuǎn)換。

        /// <summary>
        /// 本時(shí)區(qū)日期時(shí)間轉(zhuǎn)時(shí)間戳
        /// </summary>
        /// <param name="datetime"></param>
        /// <returns>long=Int64</returns>
        public static long DateTimeToTimestamp(DateTime datetime)
        {
            DateTime dd = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            DateTime timeUTC = DateTime.SpecifyKind(datetime, DateTimeKind.Utc);//本地時(shí)間轉(zhuǎn)成UTC時(shí)間
            TimeSpan ts = (timeUTC - dd);
            return (Int64)ts.TotalMilliseconds;//精確到毫秒
        }
        /// <summary>
        /// 時(shí)間戳轉(zhuǎn)本時(shí)區(qū)日期時(shí)間
        /// </summary>
        /// <param name="timeStamp"></param>
        /// <returns></returns>
        public static DateTime TimestampToDateTime(string timeStamp)
        {
            DateTime dd = DateTime.SpecifyKind(new DateTime(1970, 1, 1, 0, 0, 0, 0),DateTimeKind.Local);
            long longTimeStamp = long.Parse(timeStamp + "0000");
            TimeSpan ts = new TimeSpan(longTimeStamp);
            return dd.Add(ts);
        }

==已下timeZone已過(guò)時(shí)=============================

一、計(jì)算機(jī)時(shí)間為什么都從1970年1月1日為起始

最初計(jì)算機(jī)操作系統(tǒng)是32位,而時(shí)間也是32為表示。Integer在java內(nèi)用32位表示,因此32為能表示的最大值就是2147483647。另外一年365天的總秒數(shù)是31536000,2147483647/31536000=68.1,也就是說(shuō)32為能表示的最長(zhǎng)時(shí)間是68.1,也就是說(shuō)32為能表示的最長(zhǎng)時(shí)間就是68年,從1970年開始的話,加上68.1年,實(shí)際最終到2038年01月19日03時(shí)14分07秒,便會(huì)達(dá)到最大時(shí)間,過(guò)了這個(gè)時(shí)間點(diǎn),所有32為操作系統(tǒng)時(shí)間便會(huì)變?yōu)?0000000 00000000 00000000 00000000,算下來(lái)也就是1901年12月13日20時(shí)45分52秒,這樣便會(huì)出現(xiàn)時(shí)間回歸的現(xiàn)象,很多軟件便會(huì)運(yùn)行異常。

到這里我想問(wèn)題的答案已經(jīng)顯現(xiàn)出來(lái)了,那就是因?yàn)橛?2為來(lái)表示時(shí)間的最大間隔是68年,而最早出現(xiàn)的UNIX系統(tǒng)考慮到計(jì)算機(jī)產(chǎn)生的年代個(gè)應(yīng)用的時(shí)限,綜合取了1970年1月1日作為UNIX TIME的紀(jì)元時(shí)間(開始時(shí)間),至于時(shí)間回歸現(xiàn)象相信隨著64位操作系統(tǒng)可以表示到292,277,026,596年以后了,這是時(shí)間已經(jīng)是兩千億年以后了,所以也不用擔(dān)心了。

二、本地時(shí)間和UTC時(shí)間相互轉(zhuǎn)化

DateTime localDateTime = DateTime.Now;//本地時(shí)間
 
DateTime utcDateTime = DateTime.UtcNow;//協(xié)調(diào)世界時(shí)
 
DateTime temp1 = DateTime.SpecifyKind(localDateTime, DateTimeKind.Utc);
//本地時(shí)間轉(zhuǎn)成UTC時(shí)間
 
DateTime temp2 = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Local);
//將UTC時(shí)間轉(zhuǎn)成本地時(shí)間
 
DateTime temp3 = DateTime.SpecifyKind(localDateTime, DateTimeKind.Unspecified);
//既不是本地時(shí)間也不是UTC時(shí)間

UtcNow的替代方法DateTimeOffset.UtcNow
    前者通過(guò)分配DateTimeKind.Utc給其Kind屬性來(lái)指示日期和時(shí)間值是協(xié)調(diào)世界時(shí) (UTC), 后者會(huì)將日期和時(shí)間值分配給 UTC 時(shí)間的偏移量 (等于TimeSpan.Zero)。

三、javascript和unix時(shí)間戳的使用和轉(zhuǎn)化

1. 什么是時(shí)間戳

首先要清楚JavaScript與Unix的時(shí)間戳的區(qū)別:

JavaScript時(shí)間戳:是指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總毫秒數(shù)。

Unix時(shí)間戳:是指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù)。

可以看出JavaScript時(shí)間戳總毫秒數(shù),Unix時(shí)間戳是總秒數(shù)。

比如同樣是的 2016/11/03 12:30:00 ,轉(zhuǎn)換為JavaScript時(shí)間戳為 1478147400000;轉(zhuǎn)換為Unix時(shí)間戳為 1478147400。

2. JavaScript時(shí)間戳相互轉(zhuǎn)換

2.1 C# DateTime轉(zhuǎn)換為JavaScript時(shí)間戳

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當(dāng)?shù)貢r(shí)區(qū)
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒數(shù)
System.Console.WriteLine(timeStamp);

2.2 JavaScript時(shí)間戳轉(zhuǎn)換為C# DateTime

long jsTimeStamp = 1478169023479;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當(dāng)?shù)貢r(shí)區(qū)
DateTime dt = startTime.AddMilliseconds(jsTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

3. Unix時(shí)間戳相互轉(zhuǎn)換

3.1 C# DateTime轉(zhuǎn)換為Unix時(shí)間戳

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當(dāng)?shù)貢r(shí)區(qū)
long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒數(shù)
System.Console.WriteLine(timeStamp);

3.2 Unix時(shí)間戳轉(zhuǎn)換為C# DateTime

long unixTimeStamp = 1478162177;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當(dāng)?shù)貢r(shí)區(qū)
DateTime dt = startTime.AddSeconds(unixTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

應(yīng)用:

一、獲取系統(tǒng)時(shí)間的時(shí)間戳

獲取系統(tǒng)時(shí)間的時(shí)間戳

? ? public string GetTimeStamp()
? ? {
? ? ? ? //DateTime.Now獲取的是電腦上的當(dāng)前時(shí)間
? ? ? ? ? ?TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
? ? ? ? return Convert.ToInt64(ts.TotalSeconds).ToString();//精確到秒
? ? }

獲取世界標(biāo)準(zhǔn)時(shí)區(qū)的當(dāng)前時(shí)間的時(shí)間戳

? ? public static string GetUtcNowTimeStamp()
? ? {
? ? ? ? //DateTime.UtcNow獲取的是世界標(biāo)準(zhǔn)時(shí)區(qū)的當(dāng)前時(shí)間(比北京時(shí)間少8小時(shí))
? ? ? ? TimeSpan ts = DateTime.Now ?- new DateTime(1970, 1, 1, 0, 0, 0, 0);
? ? ? ? return Convert.ToInt64(ts.TotalMilliseconds).ToString();//精確到毫秒
? ? }

二、時(shí)間戳和DateTime的相互轉(zhuǎn)換

? ?/// 時(shí)間戳轉(zhuǎn)換為DataTime
? ? public DateTime TimestampToDataTime(long unixTimeStamp)
? ? { ? ? ? ?
? ? ? ? System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當(dāng)?shù)貢r(shí)區(qū)
? ? ? ? DateTime dt = startTime.AddSeconds(unixTimeStamp);
? ? ? ? System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));
? ? ? ? return dt;
? ? }

? ? public long DataTimeToTimestamp(DateTime dateTime)
? ? {
? ? ? ? //new System.DateTime(1970, 1, 1)
? ? ? ? System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(dateTime); // 當(dāng)?shù)貢r(shí)區(qū)
? ? ? ? long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒數(shù)
? ? ? ? System.Console.WriteLine(timeStamp);
? ? ? ? return timeStamp;
? ? }

三、時(shí)差計(jì)算

? ?/// 計(jì)算兩個(gè)日期的時(shí)間間隔,返回的是時(shí)間間隔的日期差的絕對(duì)值...... ? ??
? ? /// DateTime1 第一個(gè)日期和時(shí)間
? ? /// DateTime2 第二個(gè)日期和時(shí)間
? ? private string DateDiff(DateTime DateTime1, DateTime DateTime2)
? ? {
? ? ? ? string dateDiff = null;
? ? ? ? try
? ? ? ? {
? ? ? ? ? ? TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
? ? ? ? ? ? TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
? ? ? ? ? ? TimeSpan ts = ts1.Subtract(ts2).Duration();
? ? ? ? ? ? dateDiff = ts.Days.ToString() + "天"
? ? ? ? ? ? ? ? ? ? + ts.Hours.ToString() + "小時(shí)"
? ? ? ? ? ? ? ? ? ? + ts.Minutes.ToString() + "分鐘"
? ? ? ? ? ? ? ? ? ? + ts.Seconds.ToString() + "秒";

? ? ? ? ? ? Debug.Log("時(shí)間相差:" + dateDiff);
? ? ? ? }
? ? ? ? catch
? ? ? ? {
? ? ? ? ? ? print("計(jì)算失??!");
? ? ? ? } ? ? ? ?
? ? ? ? return dateDiff;
? ? }
? ? /// 已重載.計(jì)算一個(gè)時(shí)間與當(dāng)前本地日期和時(shí)間的時(shí)間間隔,返回的是時(shí)間間隔的日期差的絕對(duì)值.
? ? /// 一個(gè)日期和時(shí)間
? ? private string DateDiff(DateTime DateTime1)
? ? {
? ? ? ? print(this.DateDiff(DateTime1, DateTime.Now));
? ? ? ? return this.DateDiff(DateTime1, DateTime.Now);
? ? }

四、判斷系統(tǒng)日期是否超過(guò)既定日期

?public static bool IsProcessTimeOut(string TragetTime = "20230227010000")
? ? {
? ? ? ? DateTime dt = DateTime.ParseExact(TragetTime, "yyyyMMddhhmmss", System.Globalization.CultureInfo.CurrentCulture);
? ? ? ? if (DateTime.Now > dt)
? ? ? ? {
? ? ? ? ? ? //print("超時(shí)了");
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? //print("未超時(shí)");
? ? ? ? return false;
? ? } ??

總結(jié)

到此這篇關(guān)于C#時(shí)間戳基本使用方法的文章就介紹到這了,更多相關(guān)C#時(shí)間戳使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#使用for循環(huán)移除HTML標(biāo)記

    C#使用for循環(huán)移除HTML標(biāo)記

    大家在項(xiàng)目開發(fā)階段移除文字中的html標(biāo)記最常用的方法就是使用正則表達(dá)式,但是正則表達(dá)式不能處理所有的html文檔,所以采用迭代方式會(huì)更好,下面小編給大家解答下
    2016-08-08
  • Unity登錄注冊(cè)時(shí)限制發(fā)送驗(yàn)證碼次數(shù)功能的解決方法

    Unity登錄注冊(cè)時(shí)限制發(fā)送驗(yàn)證碼次數(shù)功能的解決方法

    這篇文章主要為大家詳細(xì)介紹了Unity登錄注冊(cè)時(shí)限制發(fā)送驗(yàn)證碼次數(shù)功能的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • Unity3D實(shí)現(xiàn)描邊框效果

    Unity3D實(shí)現(xiàn)描邊框效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)描邊框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#之Socket客戶端全過(guò)程

    C#之Socket客戶端全過(guò)程

    這篇文章主要介紹了C#之Socket客戶端全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • c#裁剪圖片后使用zxing生成二維碼示例分享

    c#裁剪圖片后使用zxing生成二維碼示例分享

    這篇文章主要介紹了c#裁剪圖片后使用zxing生成二維碼的示例,大家參考使用吧
    2014-01-01
  • 深入理解c# checked unchecked 關(guān)鍵字

    深入理解c# checked unchecked 關(guān)鍵字

    本篇文章是對(duì)c#中的checked unchecked 關(guān)鍵字進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#/.net程序調(diào)用Python的教程分享

    C#/.net程序調(diào)用Python的教程分享

    C#的優(yōu)勢(shì)在于window下的開發(fā),不僅功能強(qiáng)大而且開發(fā)周期短。而python則有眾多的第三方庫(kù),可以避免自己造輪子,利用C#來(lái)做界面,而具體實(shí)現(xiàn)使用python來(lái)實(shí)現(xiàn)可以大大提高開發(fā)效率。本文介紹如何使用pythonnet來(lái)執(zhí)行python腳本,希望對(duì)大家有所幫助
    2023-03-03
  • C# 實(shí)現(xiàn)簡(jiǎn)易的串口監(jiān)視上位機(jī)功能附源碼下載

    C# 實(shí)現(xiàn)簡(jiǎn)易的串口監(jiān)視上位機(jī)功能附源碼下載

    這篇文章主要介紹了C# 實(shí)現(xiàn)簡(jiǎn)易的串口監(jiān)視上位機(jī)功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 利用C#實(shí)現(xiàn)繪制出地球旋轉(zhuǎn)效果

    利用C#實(shí)現(xiàn)繪制出地球旋轉(zhuǎn)效果

    這篇文章主要為大家詳細(xì)介紹了如何利用C#語(yǔ)言實(shí)現(xiàn)繪制出地球旋轉(zhuǎn)的效果,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-02-02
  • 一文帶你了解C#中的協(xié)變與逆變

    一文帶你了解C#中的協(xié)變與逆變

    這篇文章介紹了C#中協(xié)變和逆變的相關(guān)知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論