/etc/shadow中的时间戳编号是如何计算的?

/etc/shadow中的时间戳编号是如何计算的?

在我的系统上,shadow 的手册页以这种方式定义第三列值:

上次更改密码的日期,表示为自 1970 年 1 月 1 日以来的天数。

我有一个示例值“17050”。passwd -S说这是“2016-09-06”。但自 1970 年以来的秒数是“1473112800.0”。当我计算 1473112800.0/(60*60*24) 时,我得到“17049.9166666666”。

“17050”是如何计算的?它是四舍五入还是总是下一个更大的整数?

答案1

自纪元以来已经过去了几天,而不是几秒。

$ date -I -d '1970-01-01 + 17050 days'
2016-09-06

(顺便说一句,从技术上讲,你不能用秒来表示“从现在起 365 天”;由于闰秒的原因,天在 6 个月之后没有固定的长度,甚至没有可知的长度。)

答案2

检查源代码(对于Debian版本),只是缩放的使用整数除以24×3600,所以它被截断了。

请注意,您的计算结果正好相差两个小时,这可能是由于时区变化造成的。

相关内容