Witam Używam Perl's DateTime do parsowania łańcucha i konwertowania go na format daty.
Mój kod wygląda tak:
my $parser = DateTime::Format::Strptime->new( pattern => "%Y-%m-%dT%H:%M:%SZ", time_zone => "UTC", on_error => "croak");
my $startDate = $parser->parse_datetime("2017-04-14T21:00:00Z");
my $endDate = $parser->parse_datetime("2017-04-14T23:00:00Z");
print $startDate->month();
Kiedy drukuję miesiąc, dostaję tylko 4, lub jeśli data zostanie zmieniona na liczbę mniejszą niż 10, otrzymam liczbę jednocyfrową.
Czy istnieje bardziej przejrzysty sposób uzyskania dwucyfrowego miesiąca / daty bez uprzedniego dodania zera przed liczbą, jeśli jest ona mniejsza niż 10?
Odpowiedzi:
3 dla odpowiedzi № 1Użyj sprintf (lub printf, jeśli chcesz go wydrukować).
my $month = sprintf("%02d", $startDate->month());
Zeruje twoje wejście. Spojrzeć na dokumentacja aby dowiedzieć się więcej o parametrze formatu.
2 dla odpowiedzi nr 2
Możesz także dostać je wszystkie, ponieważ prawdopodobnie będziesz ich potrzebować
my ($year, $mon, $day) = unpack "A4A2A2", $startDate->ymd("");
lub
my ($year, $mon, $day) = split "-", $startDate->ymd();
Domyślny separator z DateTime ::ymd()
jest -
(dziarskość).