下面这些 Perl 示例以 Unix 秒作为通用基准,只有在运行时天然提供毫秒的地方才展示毫秒。复制之前先回答一个简单的问题:下游那个 API 要的是什么单位?
获取当前 Unix 时间
my $seconds = time();
把时间戳转成 UTC
my $seconds = 1700000000;
my @utc = gmtime($seconds);
上生产前留意
time 返回的是 Unix 秒。要 UTC 输出就用 gmtime;只有当你确实想让本机时区成为结果的一部分时,才用 localtime。
值跨越系统边界时,把单位写进字段名里:createdAtSeconds 和 createdAtMs 是比 createdAt 长了点,但出事故的时候能省下不少猜测。
Frequent questions:
- Q: localtime() 为什么返回列表而不是字符串?
- A: 在列表上下文中,localtime($ts) 返回 (sec, min, hour, mday, mon, year, wday, yday, isdst);在标量上下文中它返回一个 ctime 风格的字符串。想要自定义格式,用 POSIX::strftime 把列表拼出来。
- Q: Perl 里怎么拿到亚秒级时间戳?
- A: 用 Time::HiRes:'use Time::HiRes qw(time); my $ms = int(time() * 1000);'。这是 Perl 的核心模块,不用额外从 CPAN 安装。