私はこのタイムスタンプのフォーマットを取得したいと思います:
01/13/2010 20:42:03 - -
ここでは、年を除いて、常に2桁で、年は4桁です。そして、それは24時間時計に基づいています。
Perlでこれを行うにはどうすればよいですか?私はネイティブ関数を好みます。
[〜#〜] posix [〜#〜] は strftime
を提供します:
$ 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 [〜#〜] を回避する手段として。やめて!私の知る限り、 POSIX.pm
は1996年または1997年からコアにあります。
CPANの Date :: Format フォーマットサブルーチンを試してください。
これは私が使用するサブルーチンです。それはあなたがあなたが好むどのフォーマットでも日付のタイムスタンプを取得することを可能にします。
#! /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