这几天在项目开发的过程中使用到了Unix时间戳相关的知识,这篇文章主要讲述C#如何把DateTime与Unix时间戳进行互转。

首先获取当前系统的Unix时间戳是很简单,而获取当前系统日期后或者前的Unix时间戳则需要调用AddSeconds方法,给当前系统时间增加秒数或减少秒数,我这里用的是添加秒的方法,当然大家调用其他方法也可以,比如 AddDays直接添加天数。

//获取当前系统时间的Unix时间戳
var createdTime = Math.Round((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds + 5);
//获取当前系统时间后一个月的Unix时间戳(这里实例用的是AddSeconds以秒计算)
var overTime = Math.Round((DateTime.UtcNow.AddSeconds(2592000) - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds + 5);

DateTime转化后得到的时间戳是一个十位数的double类型的值,那么我们如何把时间戳转化为DateTime呢?

//传入string类型的unix时间戳
public DateTime UnixSwitchDatetime(string unix)
        {
            DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            TimeSpan toNow = new TimeSpan(long.Parse(unix + "0000000"));
            return dateTimeStart.Add(toNow);
        }

这样Unix时间戳就转化为了DateTime,最后如何验证我们生成的时间戳或者时间戳转化后的日期是不是正确的呢?我们可以使用tool.chinaz.cn里面的Unix时间戳工具进行验证即可。