奇怪呀,为什么打印到excel文件中第一行总是不对?

奇怪呀,为什么打印到excel文件中第一行总是不对?

我把日期打印到屏幕上了,都是对的,输出到excel时,简单验证过也是对的;
但是我的脚本比较复杂,调用了下面的t2str,第一行打印为1970-1-1,不知道哪一步出错了。
请问什么情况下会打印1970-1-1?
如下:
1970-1-1
2008-12-3
2008-12-3

[Copy to clipboard] [ - ]
CODE:
sub t2str {
    my @m = ();
    @m[0..5] = localtime(shift || time);  # 只取前面 6 个元素
    @m[4, 5] = (++$m[4], $m[5] + 1900);
    if($m[4]<10 && $m[3]<10)
    { sprintf qq/%04d-%1d-%1d/, reverse @m; }
    elsif($m[4]<10 && $m[3]>=10)
    { sprintf qq/%04d-%1d-%2d/, reverse @m; }
    elsif($m[4]>=10 && $m[3]<10)
    { sprintf qq/%04d-%2d-%1d/, reverse @m; }
    elsif($m[4]>=10 && $m[3]>=10)
    { sprintf qq/%04d-%2d-%2d/, reverse @m; }
    else
    {}
}



QUOTE:
原帖由 dl0622 于 2008-12-3 14:32 发表
我把日期打印到屏幕上了,都是对的,输出到excel时,简单验证过也是对的;
但是我的脚本比较复杂,调用了下面的t2str,第一行打印为1970-01-01,不知道哪一步出错了。
请问什么情况下会打印1970-01-01?

在许多 OS 中 epoch 为 1970-01-01, 因此 localtime(0) 就是这个了


见 perldoc -f time

可能是shift在作怪,去掉就好了
localtime(shift || time)的问题,肯定在第一行的时候shift取出值了但结果不是你预期的。