如何在 Perl 中格式化时间戳?
题
我想得到这个时间戳格式:
01/13/2010 20:42:03 - -
数字始终为 2 位数字,但年份除外,年份为 4 位数字。它基于 24 小时制。
我怎样才能在 Perl 中做到这一点?我更喜欢原生函数。
解决方案
$ perl -MPOSIX -we 'print POSIX::strftime("%m/%d/%Y %H:%M:%S\n", localtime)' 01/27/2010 14:02:34
您可能会想写这样的内容:
my ($sec, $min, $hr, $day, $mon, $year) = localtime;
printf("%02d/%02d/%04d %02d:%02d:%02d\n",
$day, $mon + 1, 1900 + $year, $hr, $min, $sec);
作为避免的手段 POSIX. 。不!AFAIK, POSIX.pm
自 1996 年或 1997 年以来一直处于核心地位。
其他提示
尝试日期::格式格式化从子程序CPAN。
这是一个子程序,我使用。它可以让你得到你喜欢的任何格式的日期时间戳。
#! /usr/bin/perl
use strict;
use warnings;
use POSIX;
use POSIX qw(strftime);
sub getTime
{
my $format = $_[0] || '%Y%m%d %I:%M:%S %p'; #default format: 20160801 10:48:03 AM
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time);
return strftime($format, $sec, $min, $hour, $wday, $mon, $year, $mday);
}
# Usage examples
print getTime()."\n"; #20160801 10:48:03 AM
print getTime('%I:%M:%S %p')."\n"; #10:48:03 AM
print getTime('%A, %B %d, %Y')."\n"; #Monday, August 01, 2016
print getTime('%Y%m%d %H:%M:%S')."\n"; #20160801 10:48:03
不隶属于 StackOverflow