什么是时间戳
时间戳默认是指Unix时间戳,从格林威治时间(UTC)1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
C# DateTime转换为Unix时间戳
.NET 4.6新方法#
只能在 .NET 4.6及更高版本里才能使用。
//包装成属性 方便调用
private long Timestamp
{
get
{
return DateTimeOffset.Now.ToUnixTimeSeconds();
}
}
通用的老方法
private long Timestamp
{
get
{
var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (DateTime.Now - startTime).TotalSeconds;
}
}
时间戳转C# DateTime
.NET 4.6 新方法
由时间戳转换的DateTimeOffset的时区默认是+00:00,此时我们需要转为本地时区,否则后续使用可能会有问题。
转为本地时区:DateTimeOffset.LocalDateTime。
示例代码如下:
//当前时间 2023/12/17 16:07:24
DateTimeOffset dto=DateTimeOffset.FromUnixTimeSeconds(Timestamp); // 1702800444
var s1 = dto.DateTime.ToString(); // 2023/12/17 16:07:24
var s2 = dto.LocalDateTime.ToString(); // 2023/12/17 8:07:24
通用的老方法
long unixTimeStamp = 1702800444;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
DateTime dt = startTime.AddSeconds(unixTimeStamp);
var s = $"{ dt:yyyy/MM/dd HH:mm:ss:ffff } "; // s => 2023/12/17 16:07:24:0000