C#中當(dāng)前時(shí)間轉(zhuǎn)為時(shí)間戳的3個(gè)方法
前言
今天我們來(lái)聊聊時(shí)間戳。
在計(jì)算機(jī)應(yīng)用世界里,無(wú)論是為了記錄事件的發(fā)生時(shí)間、保障數(shù)據(jù)一致性還是提升安全性,時(shí)間戳都是不可或缺的重要工具,特別是在防止重放攻擊和管理用戶(hù)會(huì)話方面。
比如在一個(gè)銀行應(yīng)用中,登錄請(qǐng)求和轉(zhuǎn)賬操作都會(huì)攜帶時(shí)間戳。
服務(wù)器端通過(guò)驗(yàn)證這些時(shí)間戳來(lái)確保請(qǐng)求是新鮮的,并且不是來(lái)自之前的通信。
如果用戶(hù)在一定時(shí)間內(nèi)沒(méi)有進(jìn)行任何操作,系統(tǒng)將自動(dòng)注銷(xiāo)該用戶(hù)的會(huì)話。
在 C# 中,將當(dāng)前時(shí)間轉(zhuǎn)換為時(shí)間戳是一項(xiàng)簡(jiǎn)單輕松的事情,
以下是如何實(shí)現(xiàn)這一轉(zhuǎn)換的 3 種方法,一起來(lái)看看吧!
1. 使用 DateTime 直接轉(zhuǎn)換
可以利用TotalSeconds 和TotalMilliseconds 方法直接轉(zhuǎn)換,但需要自己計(jì)算當(dāng)前時(shí)間和 Unix 紀(jì)元的差值。
代碼如下,留意代碼中的注釋
using System;
classProgram
{
static void Main()
{
// 使用 DateTime.UtcNow 獲取當(dāng)前 UTC 時(shí)間
DateTime currentTime = DateTime.UtcNow;
// 通過(guò)與 1970-01-01 00:00:00 的差值來(lái)計(jì)算時(shí)間戳
// 時(shí)間戳通常是一個(gè)從 Unix 紀(jì)元(即 1970-01-01 00:00:00) 開(kāi)始計(jì)算
// 如果有必要,你也可以自定義起始時(shí)間,如 2001-01-01
// 計(jì)算時(shí)間戳(秒)
long timestampInSeconds = (long)(currentTime - new DateTime(1970, 1, 1)).TotalSeconds;
// 計(jì)算時(shí)間戳(毫秒)
long timestampInMilliseconds = (long)(currentTime - new DateTime(1970, 1, 1)).TotalMilliseconds;
Console.WriteLine("當(dāng)前時(shí)間的時(shí)間戳(秒): " + timestampInSeconds);
Console.WriteLine("當(dāng)前時(shí)間的時(shí)間戳(毫秒): " + timestampInMilliseconds);
}
}
2. 使用 DateTime.UtcNow.Ticks
如果你需要更高的精度,可以使用DateTime.UtcNow.Ticks 來(lái)獲取當(dāng)前 UTC 時(shí)間的 Ticks(100 納秒單位)。
不過(guò)這個(gè)值并不是標(biāo)準(zhǔn)的 Unix 時(shí)間戳,需要通過(guò)簡(jiǎn)單的數(shù)學(xué)運(yùn)算轉(zhuǎn)換為秒或毫秒級(jí)別的時(shí)間戳。
using System;
classProgram
{
static void Main()
{
// 獲取當(dāng)前 UTC 時(shí)間的 Ticks
long ticks = DateTime.UtcNow.Ticks;
// 轉(zhuǎn)換為自 Unix 紀(jì)元以來(lái)的毫秒數(shù)
long unixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
long millisecondsSinceEpoch = (ticks - unixEpochTicks) / TimeSpan.TicksPerMillisecond;
Console.WriteLine($"當(dāng)前時(shí)間的時(shí)間戳(毫秒): {millisecondsSinceEpoch}");
}
}
3. 使用 DateTimeOffset
還可以使用DateTimeOffset 類(lèi)來(lái)獲取時(shí)間戳,這在處理時(shí)區(qū)時(shí)會(huì)更方便。
using System;
classProgram
{
static void Main()
{
// 獲取當(dāng)前時(shí)間
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
// 計(jì)算時(shí)間戳(秒)
long timestampInSeconds = currentTime.ToUnixTimeSeconds();
// 計(jì)算時(shí)間戳(毫秒)
long timestampInMilliseconds = currentTime.ToUnixTimeMilliseconds();
Console.WriteLine("當(dāng)前時(shí)間的時(shí)間戳(秒): " + timestampInSeconds);
Console.WriteLine("當(dāng)前時(shí)間的時(shí)間戳(毫秒): " + timestampInMilliseconds);
}
}
總結(jié)
在 C# 中,將當(dāng)前時(shí)間轉(zhuǎn)換為時(shí)間戳是一個(gè)簡(jiǎn)單而重要的操作。
通過(guò)以上 3 種方法,你可以輕松獲取 Unix 時(shí)間戳,無(wú)論是以秒還是毫秒為單位。
到此這篇關(guān)于C#中當(dāng)前時(shí)間轉(zhuǎn)為時(shí)間戳的3個(gè)方法的文章就介紹到這了,更多相關(guān)C#時(shí)間轉(zhuǎn)時(shí)間戳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WinForm中實(shí)現(xiàn)雙向數(shù)據(jù)綁定的示例詳解
在開(kāi)發(fā)WinForm應(yīng)用程序時(shí),常常需要將數(shù)據(jù)模型與用戶(hù)界面進(jìn)行同步,傳統(tǒng)的做法是手動(dòng)監(jiān)聽(tīng)UI變化并更新數(shù)據(jù)模型,這種方式不僅繁瑣而且容易出錯(cuò),為了解決這個(gè)問(wèn)題,許多現(xiàn)代UI框架都支持雙向數(shù)據(jù)綁定,本文介紹WinForm中實(shí)現(xiàn)雙向數(shù)據(jù)綁定的示例,需要的朋友可以參考下2025-05-05
C#?將數(shù)據(jù)庫(kù)SqlServer數(shù)據(jù)綁定到類(lèi)中的過(guò)程詳解
本文講述的是讀取數(shù)據(jù)庫(kù)中數(shù)據(jù)的常用做法,即將數(shù)據(jù)庫(kù)中的數(shù)據(jù)綁定到創(chuàng)建的類(lèi)中,再將類(lèi)綁定到DataGridView的數(shù)據(jù)源中的做法,對(duì)C#將SqlServer數(shù)據(jù)綁定到類(lèi)中感興趣的朋友一起看看吧2022-06-06
C#實(shí)現(xiàn)多文件打包壓縮(.Net?Core)
本文詳細(xì)講解了.Net?Core框架下C#實(shí)現(xiàn)多文件打包壓縮的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Unity Shader實(shí)現(xiàn)徑向模糊效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)徑向模糊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Unity3D實(shí)戰(zhàn)之答題系統(tǒng)的實(shí)現(xiàn)
本文將用Unity3D制作一個(gè)答題系統(tǒng),可以從文本文檔中提取題目和分?jǐn)?shù),然后綁定到UI上,在答題的過(guò)程中,自動(dòng)判斷分?jǐn)?shù),自動(dòng)判斷正確率。感興趣的可以學(xué)習(xí)一下2022-03-03
算法練習(xí)之從String.indexOf的模擬實(shí)現(xiàn)開(kāi)始
這篇文章主要介紹了算法練習(xí)從String.indexOf的模擬實(shí)現(xiàn)開(kāi)始,需要的朋友可以參考下2014-12-12

