巧用Unix时间戳

Unix时间戳包含了丰富的时间信息,很多平台都有时间戳的概念,也提供了不少操作时间戳的系统调用

这些系统调用固然强大,但我比较喜欢使用便捷的方法,而不是去调用系统函数、下面分享敲代码时候碰到的两个小例子,我使用了非常规的做法,使效率提高了那么一点点。

当代码变简单,变高效,哪怕只是一点点,心情都是非常舒畅的~ ~ ~

,

定义:是从1970年1月1日的格林尼治时间(UTC/午夜)开始所经过的,不考虑闰秒。

例二

需求,一个存储在Memcached(可理解为数据库)的结构体,结构主要内容如下,每个玩家每天可以获得马克斯经验,exp字段表示今天得到的经验,这个字段用于判断是否达到当天的最高经验

假设玩家要增加100年经验,经验值+ 100超过了,那么他要增加的经验为MAX-exp,在这之前要做一个判断

先判断是否今天第一次获得经验,如果是,设置当前的时间到时间,然后实验设置为100

这时候一般做法可能是,

struct xx {

int经验;//经验

unsigned int时间;//时间

};

,

,

Example2

需求,在Memcached存一个数据,需要设置超时时间,每日凌晨过期,这样的需求很广泛,每日任务之类的都可以有这种需求

那么在设置这个关键的时候,需要指定超时时间~,指定距离今日凌晨剩余的秒数每分钟(当秒数为0的时候,需要设置为86400,不然0在Memcached中的意思是,永不超时)

常规做法,通过系统函数获取当日的时分秒,然后计算出当日逝去的秒数,最后86400秒数,设置为超时时间

,

,


巧用Unix时间戳