2011-11-27 6 views
6

Jak przekonwertować mój powrót przy użyciu DateTime od:Perl - formatowanie wyjścia DateTime

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

Stosując ten istniejący kod:

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

Odpowiedz

5

Wystarczy dodać ->ymd("") w drugim wierszu . Parametr "" jest separatorem, który wybrałeś jako pusty ciąg.

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

Istnieje około dwunastu sposobów przetwarzania dat w języku Perl. Jednakże, jeśli wiesz, format ciąg tej pory nie może żadnego powodu, aby połączyć moduł datetime:

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

Nie jestem zaznajomiony z DateTime, ale byłbym zaskoczony, gdyby nie było to sposób sformatować dane podczas wyświetlania.

Ja osobiście wolę Time::Piece i Time::Seconds za te rzeczy. Te moduły są częścią standardowej instalacji Perla od 5.10. Poza tym uważam interfejs za dość prosty i czysty.

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

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

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

Z jakiegoś powodu nie można powiedzieć, $time = localtime - ONE_DAY; w tej samej linii. Domyślam się, że najpierw musisz utworzyć obiekt Time::Piece, zanim będziesz mógł manipulować nimi ze stałymi Time::Second.

10

ymd to najprostsza:

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

strftime bardziej ogólnego przeznaczenia:

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

Istnieją również specyficzne (np DateTime::Format::Atom) i ogólne (np DateTime::Format::Strptime) formatowania narzędzia pomocnicze można użyć:

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 — Twój kod poda datę w Anglii lub w pobliżu Anglii, a nie datę, w której się znajdujesz. Do tego chcesz

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

lub bardziej odpowiednie

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