17

我想得到这个时间戳格式:

01/13/2010 20:42:03 - -

数字总是 2 位数字,但年份除外,它是 4 位数字。它基于 24 小时制。

我怎样才能在 Perl 中做到这一点?我更喜欢原生函数。

4

3 回答 3

38

POSIX提供strftime

$ perl -MPOSIX -we 'print POSIX::strftime("%m/%d/%Y %H:%M:%S\n", localtime)'
2010 年 1 月 27 日 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的一种手段。不!AFAIKPOSIX.pm自 1996 年或 1997 年以来一直处于核心地位。

于 2010-01-27T18:58:51.223 回答
1

尝试 CPAN 中的Date::Format格式化子例程。

于 2010-01-27T19:01:05.703 回答
1

这是我使用的子程序。它允许您以您喜欢的任何格式获取日期时间戳。

#! /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
于 2016-08-01T20:48:53.787 回答