一、介紹
時間戳(Timestamp)是指從某個固定的日期時間點(如:1970年1月1日或1904年1月1日等)到現在的總秒數或毫秒數。在計算機系統中,經常需要對時間進行計算、存儲、比較和轉換,而時間戳可以方便地實現這些功能。
C#提供了多種獲取當前時間戳的方式,這篇文章將綜述這些方法及其使用場景。
二、DateTime.Now.Ticks
DateTime.Now.Ticks屬性返回自0001年1月1日午夜12:00:00以來的100納秒間隔數。這個值在整個. NET Framework上是唯一的,並適用於所有日期和時間值。Ticks屬性的值介於DateTime.MinValue.Ticks
和DateTime.MaxValue.Ticks
之間,即從0001年1月1日到9999年12月31日的範圍內的所有日期和時間。
因為Ticks表示了自0001年1月1日以來的時間間隔,所以要把Ticks轉換為秒,需要將其除以10,000,000。為了獲得毫秒時間戳,需要將Ticks除以10,000。
long seconds = DateTime.Now.Ticks / TimeSpan.TicksPerSecond; long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
三、DateTime.Now.ToUniversalTime().ToString(“yyyyMMddHHmmssfff”)
現在日期時間的UTC(協調世界時)表示與當前本地時區的偏差在表示這個時間之前是不必考慮的。直接使用DateTime.Now.ToUniversalTime()方法,將返回一個DateTime值,表示當前日期和時間的UTC時間。將這個時間格式化後,即可得到當前時間的UTC表達方式。
在這個表達中,一共包含了14個數字,前面8個數字代表年月日,接下來6個數字代表時分秒,末尾3個數字表示毫秒。該表達方式用於在分布式系統中唯一地標識一個事件的時間戳。
string utcTimeStamp = DateTime.Now.ToUniversalTime().ToString("yyyyMMddHHmmssfff");
四、DateTimeOffset.UtcNow.ToUnixTimeSeconds()
DateTimeOffset結構體表示一個日期和時間,其相對於協調世界時(UTC)的偏移量。在這個結構中,日期和時間的值是DateTime結構中一樣的,但是還包括一個Offset屬性,代表與UTC的偏移量。
該方法返回從UTC時間1970年1月1日午夜12:00(也稱作UNIX紀元)到現在的總秒數。領域中常用於時間戳操作。
long unixTimeStamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
五、Stopwatch類
Stopwatch類表示執行時間測量,並且可用於診斷和性能測試應用程序。這個類提供了一些方法和屬性,其中最重要的就是Elapsed屬性,它返回一個TimeSpan
對象,表示從計時器啟動後經過的時間。可以通過調用Elapsed.TotalMilliseconds
屬性,獲得自計時器啟動以來經過的毫秒數。
Stopwatch類通常比DateTime.Now方法更加精準,特別是對於需要測量較小代碼段執行時間的情況。
Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 單位時間代碼 stopwatch.Stop(); long milliseconds = stopwatch.ElapsedMilliseconds;
六、小結
通過以上介紹,我們了解了C#中幾種獲取當前時間戳的方法及特點。在不同的應用場景下,可以選擇不同的方法來獲得時間戳。DateTime.Now.Ticks屬性對於只需要計算不同的時間間隔長度很有用,而DateTime.Now.ToUniversalTime()方法用於生成可分布式系統中唯一的時間標識,DateTimeOffset.UtcNow.ToUnixTimeSeconds()方法則通常用於與其他平台進行時間戳的交互,StopWatch類適用於需要精準控制代碼執行時間的情況。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/308406.html