2010-10-06 11 views

Odpowiedz

29

Najbardziej efektywne dla Ciebie lub komputera?

Dla ciebie:

use POSIX qw/strftime/; 

print strftime("%Y-%m-%d", localtime), "\n"; 

Na komputerze:

my @t = localtime; 
$t[5] += 1900; 
$t[4]++; 

printf "%04d-%02d-%02d", @t[5,4,3]; 
10

Istnieje wiele modułów w przestrzeni nazw Date::, z których wiele może pomóc w zrobieniu tego, czego potrzebujesz. Albo można po prostu toczyć własną rękę:

my ($day, $mon, $year) = (localtime)[3..5]; 
printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day; 

Resources

+0

Nie zapomnij o "DateTime"! – CanSpice

6

można wykorzystać moduł Time::Piece (w pakiecie z Perl 5.10 i do góry, czy można pobrać z CPAN), w następujący sposób:

use strict; 
use warnings; 
use Time::Piece; 

my $today = localtime->ymd();  # Local time zone 
my $todayUtc = gmtime->ymd();  # UTC 
14

Lub możesz użyć modułu DateTime, który wydaje się de facto standardowym modułem obsługi daty. e dni. Należy zainstalować z CPAN.

use DateTime; 
my $now = DateTime->now->ymd; 
+0

Standaryzacja na DateTime z pewnością upraszcza obsługę tego programisty i konsekwentnie używa jednego dość obszernego modułu, ponieważ wszystko wydaje się być dobrym pomysłem w obszarze z wieloma niedogodnościami i niespójnościami, takimi jak obliczenia daty i czasu. – plusplus

+4

Użyj 'DateTime-> now-> iso8601' jeśli chcesz, aby czas również został uwzględniony. – Flimm

5

nie tworzyć żadnych zmiennych przejściowych:

printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime]; 
+1

Huh, nigdy wcześniej nie brałem pod uwagę tego użycia dla mapy. Nie wiem, czy mi się to podoba, ale z pewnością jest sprytnie. –

+2

Ten rodzaj kodu powoduje, że jednocześnie kocham i nienawidzę Perla –

Powiązane problemy