Сегодняшняя дата в Perl в формате MM / DD / YYYY

Я работаю над Perl-программой на работе и застрял (как мне кажется,) в тривиальной проблеме. Мне просто нужно построить строку в формате «06/13/2012» (всегда 10 символов, поэтому 0 для чисел меньше 10).

Вот что я имею до сих пор:

use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
 Keith Thompson20 мая 2015 г., 18:14
Если у вас есть мнение по этому вопросу, рассмотрите возможность использования однозначного и сортируемого формата ISO 8601.YYYY-MM-DD скорее, чемMM/DD/YYYY.

Ответы на вопрос(7)

Time::Piece, который не нужно устанавливать, поскольку он является основным модулем и распространяется с Perl 5 начиная с версии 10.

use Time::Piece;

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

output

06/13/2012

Update

Вы можете предпочесть использоватьdmy метод, который принимает один параметр, который является разделителем, который будет использоваться между полями результата, и избегает необходимости указывать полный формат даты / времени

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

Это дает результат, идентичный моему первоначальному решению.

 14 мар. 2016 г., 11:21
Стандартный Perl (v5.10.1) на моем сервере не имеет библиотеки ... Будет придерживаться POSIX, извините.
 04 дек. 2016 г., 13:17
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi на CentOS. Но возможно, что наш сисадмин немного повозился с этим, я не могу это проверить.
 04 дек. 2016 г., 12:30
@BramVanroy: Тогда у вас есть нестандартная установка Perl.Time::Piece былоfirst incorporated into "experimental" version 9.5 и никогда не был удален. Первый стабильный выпуск после этого будет версия 10.0, так что если у вас есть версия 10.1 безTime::Piece тогда кто-то явно удалил его из установки. В любом случае библиотека CPAN является одной из самых сильных сторон Perl, и глупо ограничивать себя только основными модулями.
 28 сент. 2015 г., 12:28
@lepe: есть три утилиты «дата» функции,dmy, mdy а такжеymd, а такжеdate это псевдоним дляymd, Все производят даты со стандартным разделителем дефисов по умолчанию, и могут быть переданы альтернативный разделитель, поэтомуlocaltime->ymd производит2015-09-28 а такжеnot 20150928 как ты говоришь. Это большая слабость этих методов - они сами по себе не описывают, что они делают, поэтому я выбралstrftime('%m/%d/%Y')
 05 дек. 2016 г., 14:11
@BramVanroy: если вы скачиваетеperl-5.10.1.tar.gz отwww.cpan.org/src/ и распаковать его, вы увидите, чтоTime::Piece находится вext подпапка вperl-5.10.1\ext\Time-Piece, Если ваш системный администратор решил создать Perl с нуля, то ему нужно будет только ответитьnone на вопросWhat extensions do you wish to include? вместо выбора по умолчанию, и у вас будет установка без большинства основных модулей.

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";
 08 окт. 2013 г., 23:59
В мире существует множество сайтов, использующих Perl 5.8 vintage 2006. $perldoc perlhist | perl -ne 'die "$_\n" if m/5.9.5.*20[01].{8}/' говорит, что 5.9.5 был выпущен 2007-июл-07
 14 июн. 2012 г., 21:30
Time::Piece появился в ядре в 5.9.5
 13 июн. 2012 г., 23:14
Когда-либоsince Time::Piece has been in coreДелать это трудным путем больше не было необходимости.
Решение Вопроса

POSIX функция. Если у вас есть куча задач с датами, см. МодульDateTime.

use POSIX qw(strftime);

my $date = strftime "%m/%d/%Y", localtime;
print $date;
 25 сент. 2013 г., 04:12
И POSIX, и DateTimeHUGE куски кода, и излишние для такой простой задачи.
 29 апр. 2017 г., 11:28
Есть ли лучший способ изменить 2017-04-29 на 29.04.2017?
use DateTime qw();
DateTime->now->strftime('%m/%d/%Y')   

06/13/2012

rintf», встроенной в perl функции (документация: perldoc perlfunc)

use strict;
use warnings;
use Date::Calc qw();
my ($y, $m, $d) = Date::Calc::Today();
my $ddmmyyyy = sprintf '%02d.%02d.%d', $d, $m, $y;
print $ddmmyyyy . "\n";

Это дает вам:

14.05.2014

use Time::Piece;
...
my $t = localtime;
print $t->mdy("/");# 02/29/2000
 21 янв. 2015 г., 12:14
Этот ответ уже был дан ранее.
 22 янв. 2015 г., 18:06
Кажется, это более удобный пример использования. К сожалению, я не могу комментировать ответ г-на Бородина.

# 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";
 20 мая 2015 г., 18:18
@KeithThompson Спасибо. Исправлена
 20 мая 2015 г., 18:07
chomp также работает для удаления символов новой строки:chomp $current_date
 20 мая 2015 г., 18:11
Вопрос, специально заданный дляMM/DD/YYYY формат. Я предпочитаю ISO 8601YYYY-MM-DD отформатировать сам, но это не правильно ответить на вопрос.

Ваш ответ на вопрос