您的位置:

C#获取当前时间戳

一、介绍

时间戳(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.TicksDateTime.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类适用于需要精准控制代码执行时间的情况。