使用这两函数时,由于内部把纪元秒存为有符号整数,可表示正的和负的日期,但计算机存储器所表示的整数大小是有限的,用有限的位数来表示秒。这就是说,我们在计算纪元秒时,所表示的日期是有限制的。
确切的限度取决于你的机器所能表示的整数的位数。 Perl最多以32位的长度存储整数。粗略地讲,有一位用来表示正负号,其余31位来表示数。如果8位,你可以存储的最大数是255,即2的8次方减1。故Perl中所存储的32位符号数中的最大数为:
print 2**31–1, "\n";
2147483647
这个数字对应了哪个日期呢?
print scalar(gmtime 2**31-1), "\n";
Tue Jan 19 03:14:07 2038
在那个时刻的1秒之后会发生什么呢?
将返回空值,因为cookie内部使用的是gmtime,所以设定时时间不能超过Tue Jan 19 03:14:07 2038