Perl - форматирование вывода DateTime - PullRequest
7 голосов
/ 28 ноября 2011

Как конвертировать мой возврат с использованием DateTime из:

This is my date:2011-11-26T20:11:06 в This is my date:20111126

Используя этот существующий код:

use DateTime qw();
my $dt3 = DateTime->now->subtract(days => 1);
print "This is my date:$dt3\n"

Ответы [ 3 ]

10 голосов
/ 28 ноября 2011

ymd является самым простым:

print "This is my date: ", $dt3->ymd(''), "\n";

strftime более общего назначения:

print "This is my date: ", $dt3->strftime('%Y%m%d'), "\n";

Существуют также конкретные (например, DateTime :: Format:: Вспомогательные инструменты форматирования Atom ) и общие (например, DateTime :: Format :: Strptime ), которые вы можете использовать:

use DateTime::Format::Strptime qw( );
my $format = DateTime::Format::Strptime->new( pattern => '%Y%m%d' );
print "This is my date: ", $format->format_datetime($dt3), "\n";

PS - в вашем коде будет указана дата илинедалеко от Англии, а не дата, где вы находитесь.Для этого вы хотите

my $dt3 = DateTime->now(time_zone => 'local');

или более подходящий

my $dt3 = DateTime->today(time_zone => 'local');
7 голосов
/ 28 ноября 2011

Просто добавьте ->ymd("") во второй строке. Параметр "" - это разделитель, который вы выбрали в качестве пустой строки.

use DateTime qw();
my $dt3 = DateTime->now->subtract(days => 1)->ymd("");
print "This is my date:$dt3\n"
0 голосов
/ 28 ноября 2011

В Perl существует около десятка способов обработки дат. Однако если вы знаете формат строки даты, возможно, нет причин вызывать модуль datetime:

$dt3 =~ /^(\d+)-(\d+)-(\d+)/;
print "This is my date:${1}${2}${3}\n";

Я не знаком с DateTime, но был бы удивлен, если бы не было способа отформатировать данные при их отображении.

Я лично предпочитаю Time :: Piece и Time :: Seconds для этих вещей. Эти модули были частью стандартной установки Perl с 5.10. Кроме того, я нахожу интерфейс довольно простым и чистым.

use Time::Piece;
use Time::Seconds;

my $time = localtime;
$time -= ONE_DAY;

print "This is my date:" . $time->ymd("");

По какой-то причине вы не можете сказать $time = localtime - ONE_DAY; в одной строке. Я думаю, вам нужно сначала создать объект Time::Piece, прежде чем вы сможете манипулировать им с помощью констант Time::Second.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...