使用模块datetime
,附赠一个没啥用的“时间推算”功能(获取n天后对应的时间
代码:
import datetimedef GetTimestamp(year,month,day,hour,minute,second,*,relative=None,timezone=None):#返回指定时间戳。指定relative时进行时间推算"""根据传入的参数返回时间戳传入relative进行时间推算(relative为时间戳)不指定timezone的值则默认为本地时区"""if(relative):relative=datetime.datetime.fromtimestamp(relative,tz=timezone)d_y,d_m=divmod(relative.month+month,12)#month的取值限制在1~12d_y=relative.year+year+d_yd_d=relative.dayt_h=relative.hourt_m=relative.minutet_s=relative.seconddt=datetime.datetime(d_y,d_m,d_d,t_h,t_m,t_s,tzinfo=timezone)delta=datetime.timedelta(days=day,hours=hour,minutes=minute,seconds=second)#timedelta以day进行推算dt+=deltaelse:dt=datetime.datetime(year,month,day,hour,minute,second,tzinfo=timezone)return dt.timestamp()t=GetTimestamp(2023,9,16,13,27,00)
tr=GetTimestamp(1,0,50,0,0,0,relative=t)#1年50天后
print(datetime.datetime.fromtimestamp(t))
print(datetime.datetime.fromtimestamp(tr))
运行结果
补充:
可变参数*
的特殊用法:在定义函数时,函数声明中的可变参数*
后面仍然可以跟参数(参数需要有默认值),作用便是星号*后面的参数需要显式指定才能正常传入。这操作一定程度上可以规范代码和增加代码可读性,上面代码中的自定义函数GetTimestamp便使用了该技巧。- 官方原文:time模块中的功能可能无法处理纪元之前或将来的远期日期和时间。未来的截止点由C库决定;对于32位系统,它通常在2038年。虽然的确是有获取1970年以前日期对应的时间戳:python utc时间戳转换 (解决1970之前的问题),但说实在的即便拿到一个负数时间戳也没有什么意义,所以这里对1970以前的日期不予处理。