日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#時間戳基本使用方法詳解_C#教程

作者:Kilven_ck ? 更新時間: 2022-11-28 編程語言

時間戳轉換:

由于TimeZone類已經過時,官方推薦使用TimeZoneInfo來做時間的轉換。

        /// <summary>
        /// 本時區日期時間轉時間戳
        /// </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);//本地時間轉成UTC時間
            TimeSpan ts = (timeUTC - dd);
            return (Int64)ts.TotalMilliseconds;//精確到毫秒
        }
        /// <summary>
        /// 時間戳轉本時區日期時間
        /// </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已過時=============================

一、計算機時間為什么都從1970年1月1日為起始

最初計算機操作系統是32位,而時間也是32為表示。Integer在java內用32位表示,因此32為能表示的最大值就是2147483647。另外一年365天的總秒數是31536000,2147483647/31536000=68.1,也就是說32為能表示的最長時間是68.1,也就是說32為能表示的最長時間就是68年,從1970年開始的話,加上68.1年,實際最終到2038年01月19日03時14分07秒,便會達到最大時間,過了這個時間點,所有32為操作系統時間便會變為10000000 00000000 00000000 00000000,算下來也就是1901年12月13日20時45分52秒,這樣便會出現時間回歸的現象,很多軟件便會運行異常。

到這里我想問題的答案已經顯現出來了,那就是因為用32為來表示時間的最大間隔是68年,而最早出現的UNIX系統考慮到計算機產生的年代個應用的時限,綜合取了1970年1月1日作為UNIX TIME的紀元時間(開始時間),至于時間回歸現象相信隨著64位操作系統可以表示到292,277,026,596年以后了,這是時間已經是兩千億年以后了,所以也不用擔心了。

二、本地時間和UTC時間相互轉化

DateTime localDateTime = DateTime.Now;//本地時間
 
DateTime utcDateTime = DateTime.UtcNow;//協調世界時
 
DateTime temp1 = DateTime.SpecifyKind(localDateTime, DateTimeKind.Utc);
//本地時間轉成UTC時間
 
DateTime temp2 = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Local);
//將UTC時間轉成本地時間
 
DateTime temp3 = DateTime.SpecifyKind(localDateTime, DateTimeKind.Unspecified);
//既不是本地時間也不是UTC時間

UtcNow的替代方法DateTimeOffset.UtcNow
? ? 前者通過分配DateTimeKind.Utc給其Kind屬性來指示日期和時間值是協調世界時 (UTC), 后者會將日期和時間值分配給 UTC 時間的偏移量 (等于TimeSpan.Zero)。

三、javascript和unix時間戳的使用和轉化

1. 什么是時間戳

首先要清楚JavaScript與Unix的時間戳的區別:

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

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

可以看出JavaScript時間戳總毫秒數,Unix時間戳是總秒數。

比如同樣是的 2016/11/03 12:30:00 ,轉換為JavaScript時間戳為 1478147400000;轉換為Unix時間戳為 1478147400。

2. JavaScript時間戳相互轉換

2.1 C# DateTime轉換為JavaScript時間戳

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒數
System.Console.WriteLine(timeStamp);

2.2 JavaScript時間戳轉換為C# DateTime

long jsTimeStamp = 1478169023479;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
DateTime dt = startTime.AddMilliseconds(jsTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

3. Unix時間戳相互轉換

3.1 C# DateTime轉換為Unix時間戳

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒數
System.Console.WriteLine(timeStamp);

3.2 Unix時間戳轉換為C# DateTime

long unixTimeStamp = 1478162177;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
DateTime dt = startTime.AddSeconds(unixTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

應用:

一、獲取系統時間的時間戳

獲取系統時間的時間戳

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

獲取世界標準時區的當前時間的時間戳

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

二、時間戳和DateTime的相互轉換

? ?/// 時間戳轉換為DataTime
? ? public DateTime TimestampToDataTime(long unixTimeStamp)
? ? { ? ? ? ?
? ? ? ? System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
? ? ? ? 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); // 當地時區
? ? ? ? long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒數
? ? ? ? System.Console.WriteLine(timeStamp);
? ? ? ? return timeStamp;
? ? }

三、時差計算

? ?/// 計算兩個日期的時間間隔,返回的是時間間隔的日期差的絕對值...... ? ??
? ? /// DateTime1 第一個日期和時間
? ? /// DateTime2 第二個日期和時間
? ? 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() + "小時"
? ? ? ? ? ? ? ? ? ? + ts.Minutes.ToString() + "分鐘"
? ? ? ? ? ? ? ? ? ? + ts.Seconds.ToString() + "秒";

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

四、判斷系統日期是否超過既定日期

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

總結

原文鏈接:https://blog.csdn.net/wobaiwodedukuku/article/details/124819182

欄目分類
最近更新