【Unity/C#实战】时间戳

前言

时间戳在计算机科学和游戏设计中有着重要的意义。它是记录和比较时间的一种标准方式,经常用在网游的营销活动等,通过比较时间戳,可以确定是否在活动时间范围内诸如此类。一般来说它是一个long类型的数据。

可能也会有同志问了,long和ulong它俩区别一个有符号,一个无符号,难道说时间戳还能是负数?是的,因为做的是减法,看下面原理。

在C#中,时间戳通常是以Unix时间戳的形式存在,它是指从格林威治时间1970年1月1日00:00:00起至指定时间点的总秒数。C#中的DateTime类型提供了一些方法和属性,可以方便地进行时间戳的计算。

网上一般操作

网上搜的话,一般都是使用DateTime.Now属性获取系统当前的日期和时间信息。通过DateTime对象的ToUniversalTime()方法将其转换为格林威治时间,然后使用Subtract方法减去1970年1月1日00:00:00,得到当前时间相对于1970年1月1日00:00:00的总秒数,也就是我们最终要的时间戳了。

示例代码如下:

DateTime now = DateTime.Now;
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan timeSpan = now.ToUniversalTime() - unixEpoch;
long timestamp = (long)timeSpan.TotalSeconds;
Console.WriteLine("当前时间戳:" + timestamp);

同样地,也可以使用DateTime对象的ToUniversalTime()方法将指定时间转换为格林威治时间,然后使用Subtract方法减去1970年1月1日00:00:00的时间戳,得到指定时间相对于1970年1月1日00:00:00的总秒数。

示例代码如下:

DateTime specifiedTime = new DateTime(2022, 1, 1, 0, 0, 0, DateTimeKind.Local);
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan timeSpan = specifiedTime.ToUniversalTime() - unixEpoch;
long timestamp = (long)timeSpan.TotalSeconds;
Console.WriteLine("指定时间的时间戳:" + timestamp);

一句代码完活儿的方法

事实上,自.NET进入4.6版本,我们可以使用DateTimeOffset类型来算时间戳。DateTimeOffset类型包含了日期和时间信息以及与协调世界时(UTC)的偏移量。我们可以通过DateTimeOffset.Now属性获取当前的时间戳,并使用DateTimeOffset对象的ToUnixTimeSeconds()方法将其转换为Unix时间戳。

示例代码如下:

long timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();

基本现在主流的Unity版本的.NET都支持这个东西,不是什么新鲜东西了,可能也是习惯原因,用最原始的减法解决,这也不是什么问题,这也说明是懂这个原理的。

既然做交付,怎么快怎么省力就怎么来,别苦了自己,要学会“偷懒”。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值