如何将time::Tm转换为JWT到期日期的u64

如何将time::Tm转换为JWT到期日期的u64,time,rust,jwt,Time,Rust,Jwt,我正在使用,我想在声明结构中设置过期日期。中的exp字段采用了选项 我可以通过执行以下操作检索当前日期并向其添加1天: let mut timer = time::now(); timer = timer + Duration::days(1); 但我不知道如何将此time::Tm转换为u64exp字段为“NumericDate”类型,根据is“从UTC 1970-01-01T00:00:00Z到指定UTC日期/时间的秒数,忽略闰秒” 此描述与Tm当前时区中的“将时间转换为1970年1月1日起

我正在使用,我想在
声明
结构中设置过期日期。中的
exp
字段采用了
选项

我可以通过执行以下操作检索当前日期并向其添加1天:

let mut timer = time::now();
timer = timer + Duration::days(1);

但我不知道如何将此
time::Tm
转换为
u64
exp
字段为“NumericDate”类型,根据is“从UTC 1970-01-01T00:00:00Z到指定UTC日期/时间的秒数,忽略闰秒”

此描述与Tm当前时区中的“将时间转换为1970年1月1日起的秒数”相同*

因此:

(请注意,
time+duration
始终从v0.1.36开始返回UTC时间,但可以肯定的是,它在将来可能会被固定。为了向前兼容,我使用了
now\u UTC()
而不是
now()

(*:
to_timespec
基本上在POSIX上调用
gmtime()
,POSIX标准忽略闰秒。在Windows上,它将结构转换为文件时间。因此,如果您真正关心27秒的差异,那么
to_timespec
可以安全使用。)


如果您使用的是
std::time::SystemTime
,则可以使用

let mut timer = SystemTime::now();
timer += Duration::from_secs(86400);
token.claims.reg.exp = Some(timer.duration_since(UNIX_EPOCH).unwrap().as_secs());

你救了我一天!
let mut timer = SystemTime::now();
timer += Duration::from_secs(86400);
token.claims.reg.exp = Some(timer.duration_since(UNIX_EPOCH).unwrap().as_secs());