49

私は職場で Perl プログラムに取り組んでいて、(私が思うに) 些細な問題に固執しています。「06/13/2012」という形式で文字列を作成するだけです (常に 10 文字なので、10 未満の数字は 0 になります)。

これが私がこれまでに持っているものです:

use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
4

7 に答える 7

66

1 つのPOSIX関数を使用するだけで、高速に実行できます。日付を伴うタスクがたくさんある場合は、モジュールDateTimeを参照してください。

use POSIX qw(strftime);

my $date = strftime "%m/%d/%Y", localtime;
print $date;
于 2012-06-13T18:13:22.463 に答える
58

を使用できますTime::Piece。これはコア モジュールであり、バージョン 10 以降の Perl 5 で配布されているため、インストールする必要はありません。

use Time::Piece;

my $date = localtime->strftime('%m/%d/%Y');
print $date;

出力

06/13/2012


アップデート

dmy結果のフィールド間で使用されるセパレーターである単一のパラメーターを取り、完全な日付/時刻形式を指定する必要を回避するメソッドを使用することを好む場合があります。

my $date = localtime->dmy('/');

これにより、元のソリューションと同じ結果が得られます

于 2012-06-13T18:14:44.587 に答える
17
use DateTime qw();
DateTime->now->strftime('%m/%d/%Y')   

式が返す06/13/2012

于 2012-06-13T21:11:00.773 に答える
9

難しいことをするのが好きなら:

my (undef,undef,undef,$mday,$mon,$year) = localtime;
$year = $year+1900;
$mon += 1;
if (length($mon)  == 1) {$mon = "0$mon";}
if (length($mday) == 1) {$mday = "0$mday";}
my $today = "$mon/$mday/$year";
于 2012-06-13T18:45:10.030 に答える
4
use Time::Piece;
...
my $t = localtime;
print $t->mdy("/");# 02/29/2000
于 2015-01-21T10:54:10.510 に答える
4

Unix システム用の Perl コード:

# Capture date from shell
my $current_date = `date +"%m/%d/%Y"`;

# Remove newline character
$current_date = substr($current_date,0,-1);

print $current_date, "\n";
于 2014-05-14T06:04:12.207 に答える