Zastanawiam się, czy istnieje prosty sposób w Perlu, aby zapewnić, że ciąg daty odpowiada poprawnej dacie. Na przykład 2012 02 30
jest niepoprawny, ponieważ nie istnieje.W Perlu, w jaki sposób mogę się upewnić, że ciąg odpowiada poprawnej dacie?
Odpowiedz
Sprawdź tutaj: http://www.perlmonks.org/?node_id=564594
wierzę, otrzymasz odpowiedź, której szukasz od mądrych mnichów.
Coś w tym przy użyciu Class :: data powinna pracować
Perl testit.pl czek Gama daty lub czasu udało
use Class::Date;
my $d=Class::Date->new('2021-02-30');
unless ($d->error) {
print "good date\n";
} else {
print $d->errstr(). "\n";
}
exit;
Moduł DateTime potwierdzi datę podczas tworzenia nowego obiektu.
$ perl -we 'use DateTime; my $dt;
eval { $dt = DateTime->new(
year => 2012,
month => 2,
day => 30);
}; print "Error: [email protected]" if [email protected];'
Error: Invalid day of month (day = 30 - month = 2 - year = 2012) at -e line 1
Działa również dynamicznie na danym DateTime
obiektu:
$dt->set(day => 30);
Może być to pomoże też:
use Time::Piece; #in perl CORE distro since 5.10
use 5.010;
say Time::Piece->strptime("2011-02-29","%Y-%m-%d")->strftime("%Y-%m-%d");
#2011-03-01
say Time::Piece->strptime("2012-02-29","%Y-%m-%d")->strftime("%Y-%m-%d");
#2012-02-29
Można to zrobić poprzez zastosowanie z POSIX mktime
, ale najwyraźniej tylko jeśli masz flexi niewystarczająca implementacja mktime
.
Co mam zrobić, to podłączyć numery, a następnie użyć czasu lokalnego, aby je odzyskać, a jeśli otrzymam tę samą wartość z powrotem, jest to prawidłowy numer. Tak więc, biorąc pod uwagę kryteria:
my ($y, $m, $d) = split ' ', $date_string;
die "$date_string is not a valid date!"
unless ($d == (localtime mktime(0, 0, 0, $d, $m - 1, $y - 1900))[3])
;
See, w wersjach mktime
że jestem przyzwyczajony do, mktime(0, 0, 0, 30, 1, 112)
stałaby '2012-03-01'
i 30 != 1
Można również użyć Time::Local:
#!/usr/bin/env perl
use strict; use warnings;
use Carp qw(croak);
use Time::Local qw(timegm);
my @to_check = ('1927 06 18', '2012 02 30');
for my $date (@to_check) {
printf "'%s' is %s\n", $date, check_date($date) ? 'valid' : 'invalid';
}
sub check_date {
my ($date) = @_;
my ($year, $month, $mday) = split ' ', $date;
my $ret;
eval {
$ret = timegm(0, 0, 0, $mday, $month - 1, $year - 1900);
};
return $ret && $ret;
}
- 1. W przypadku PDO, w jaki sposób mogę się upewnić, że instrukcja UPDATE zakończyła się pomyślnie?
- 2. Jak mogę się upewnić, że funkcja strtol() powiodła się?
- 3. Jak mogę się upewnić, że użytkownik jest zalogowany tylko raz?
- 4. W jaki sposób można upewnić się, że plik wykonywalny jest otwierany za pomocą innego pliku wykonywalnego?
- 5. W języku Java, w jaki sposób mogę się upewnić, że moja aplikacja internetowa jest bezpieczna dla wątków?
- 6. Używanie Java 6, w systemie Linux, w jaki sposób mogę się upewnić, że korzystam z gniazda ipv4?
- 7. Jak mogę wstępnie przydzielić ciąg w Perlu?
- 8. Jak mogę się upewnić, że kodowanie pliku jest prawidłowe?
- 9. Jak mogę się upewnić, że przeciągnięty element zachowuje szerokość oryginału?
- 10. Jak się upewnić, że przesyłają określone pliki?
- 11. Jaki jest najlepszy sposób, aby upewnić się, że działa tylko jedna instancja programu Perl?
- 12. Jak upewnić się, że zmienna jest obiektem?
- 13. Jak upewnić się, że zaznaczony tekst opcji wyrównuje się w środku w IE?
- 14. Jaki jest najbardziej pythonic sposób, aby upewnić się, że wszystkie elementy listy są różne?
- 15. Jak mogę się upewnić, że DIV rozciąga się w celu dopasowania do jego zawartości?
- 16. Jak mogę się upewnić, że plik mapowany w pamięci zachowuje dostęp do stron pamięci?
- 17. Jaki jest najdłuższy ciąg jaki mogę mieć?
- 18. W jaki sposób jawnie niszczysz obiekt w Perlu?
- 19. Jak upewnić się, że monit uruchamia się podczas uruchamiania systemu?
- 20. Jak mogę się upewnić, że FirstOrDefault <KeyValuePair> powrócił wartość
- 21. Jak upewnić się, że kod jest ponownie używany poprawnie?
- 22. W Perlu, w jaki sposób mogę zastąpić tylko pierwszy znak ciągu?
- 23. Jak upewnić się, że żądania pochodzą z mojej witryny?
- 24. Jak mogę się upewnić, że pętla while w Pythonie zajmuje określony czas?
- 25. Jak mogę się upewnić, że usunę obiekt w swoim singletonie przed zamknięciem aplikacji?
- 26. Jak mogę się upewnić, że zdarzenie textchanged w polu tekstowym jest uruchamiane przed zdarzeniem kliknięcia przycisku?
- 27. Jak mogę odwrócić ciąg zawierający kombinację znaków w Perlu?
- 28. Co to znaczy, że operator wiąże się w Perlu?
- 29. Jak mogę się upewnić, że główny wątek kończy się po zakończeniu wszystkich pozostałych wątków?
- 30. W jaki sposób Python robi ciąg magii?
Do zauważ, że te stanowiska mają 6 lat. – TLP
Czy kalendarze zmieniły się w ciągu 6 lat? – Benoit
@Benoit Możesz o tym powiedzieć. Czy lata zmieniły się tak bardzo w latach 1999-2000? Prawdopodobnie nie jest to wielka sprawa (nie jest to moja uwaga) i większość kodu prawdopodobnie nadal będzie działać, ale warto to zauważyć. – TLP