📜  以秒为单位获取 unix 时间 C# (1)

📅  最后修改于: 2023-12-03 15:06:40.923000             🧑  作者: Mango

以秒为单位获取 unix 时间 C#

在计算机领域中,Unix 时间是一个以秒为单位的时间表示方法,它指从格林威治时间(GMT)的1970年1月1日0时0分0秒起至现在的总秒数,因此也叫做“Epoch 时间”。

在 C# 中,我们可以使用 DateTime 类型的 ToUnixTimeSeconds 方法来获取当前时间的 Unix 时间戳,代码如下:

// 获取当前时间的 Unix 时间戳
long unixTimestamp = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

这里的 UtcNow 方法获取的是当前的 UTC 时间,而不是本地时间,因为 Unix 时间戳是基于 GMT 的。

对于指定的时间,我们可以先将其转换为 UTC 时间,然后再计算 Unix 时间戳:

// 获取指定时间的 Unix 时间戳
DateTime time = new DateTime(2022, 1, 1, 0, 0, 0, DateTimeKind.Local);
long unixTimestamp = (long)time.ToUniversalTime().Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

这里使用了 ToUniversalTime 方法将本地时间转换为 UTC 时间,因为 Subtract 方法只能接受 UTC 时间。

除了使用 DateTime 类型,我们还可以使用 DateTimeOffset 类型来获取 Unix 时间戳,代码如下:

// 获取当前时间的 Unix 时间戳
long unixTimestamp = (long)DateTimeOffset.UtcNow.ToUnixTimeSeconds();

这里的 ToUnixTimeSeconds 方法直接返回当前时间的 Unix 时间戳,不需要进行额外的计算。

对于指定的时间,我们可以先将其转换为 DateTimeOffset 类型,然后再调用 ToUnixTimeSeconds 方法:

// 获取指定时间的 Unix 时间戳
DateTimeOffset time = new DateTimeOffset(2022, 1, 1, 0, 0, 0, TimeSpan.FromHours(8));
long unixTimestamp = time.ToUnixTimeSeconds();

这里的 FromHours(8) 表示将时间转换成东八区时间,具体的偏移量可以根据需要进行设置。

以上就是以秒为单位获取 Unix 时间的方法,在实际开发中需要根据具体情况来选择合适的实现方式。