Ich versuche, ein ISO 8601 Zeitformat, P3Y6M4DT12H30M5S, in Sekunden in Perl zu konvertieren. Gibt es eine Bibliothek, die das tut? Ich habe versucht, zu suchen, aber ich habe nur eine js-Bibliothek gefunden. Durch DateTime und Time :: Moment hat auch keine Lösung gefunden.Umwandlung der ISO8601-Dauer (P3Y6M ...) in Sekunden in Perl
Antwort
Es gibt DateTime::Format::Duration::ISO8601, die die ISO 8601-Dauer Zeichenfolge in ein DateTime::Duration Objekt konvertieren können. Sie können das dann in Sekunden umwandeln.
use DateTime::Duration;
use DateTime::Format::Duration::ISO8601;
my $format = DateTime::Format::Duration::ISO8601->new;
my $d = $format->parse_duration('P3Y6M4DT12H30M5S');
jedoch die Datetime :: Dauer Format kann nicht ein Jahr auf Sekunden zu konvertieren verwendet werden, wie in the docs here erläutert.
Das letzte Beispiel zeigt, dass es keine Konvertierung zwischen Einheiten gibt, die keine feste Umwandlungsrate haben. Die einzigen Konvertierungen möglich sind:
years <=> months weeks <=> days hours <=> minutes seconds <=> nanoseconds
Für die Erklärung, warum dies der Fall ist, finden Sie in der How DateTime Math Works Abschnitt der DateTime.pm Dokumentation
Sie DateTime::Format::Duration mit dem %s
können sehen pattern zu Umgehe das. Eine vollständige Implementierung könnte so aussehen.
use DateTime::Duration;
use DateTime::Format::Duration::ISO8601;
use DateTime::Format::Duration;
my $format = DateTime::Format::Duration::ISO8601->new;
my $d = $format->parse_duration('P3Y6M4DT12H30M5S');
my $output_format = DateTime::Format::Duration->new(pattern => '%s');
print $output_format->format_duration($d);
Oder, kurz gesagt, wenn Sie es nur einmal brauchen.
use DateTime::Duration;
use DateTime::Format::Duration::ISO8601;
use DateTime::Format::Duration;
print DateTime::Format::Duration->new(pattern => '%s')
->format_duration(
DateTime::Format::Duration::ISO8601->new->parse_duration('P3Y6M4DT12H30M5S'));
Beide werden
109254605
- 1. Perl: Berechne die Anzahl der Tage durch Umwandlung in Sekunden
- 2. Umwandlung MB in TB perl
- 3. eine Zeit Zeichenfolge Sekunden in Python Umwandlung
- 4. Fraktur Symbole in Umwandlung Entities mit Perl
- 5. sybase sql Art der Umwandlung Sekunden Wert in Stunden Minuten und Sekunden
- 6. Umwandlung von Millisekunden in Sekunden funktioniert nicht in C#
- 7. Power BI - Umwandlung von Sekunden in Stunden in DAX
- 8. Teradata Umwandlung von Sekunden bis Stunden
- 9. ändern Eingabetyp Zeit Sekunden in der Steuerung
- 10. Parsing dateTime in Perl korrekt zu Mikro/Nano Sekunden
- 11. Strings Perl $ Tabellen zu Hash Umwandlung
- 12. symmetrisch und transitiv benutzerdefinierte Einheit Umwandlung in Perl
- 13. Zeitstempel in Sekunden in Excel konvertieren
- 14. Get Chrono Sekunden in Float
- 15. Fehler in der Umwandlung Wasserkocher
- 16. Ändern der Sekunden in UTC in Matlab
- 17. Umwandlung eines Zeitformats in Excel
- 18. Umfang der Variablen in Perl
- 19. Sekunden in Tage, Minuten und Sekunden umrechnen
- 20. Sekunden in Minuten und Sekunden umrechnen
- 21. Umwandlung in Graustufen mit EmguCV in C#
- 22. Mysql UPDATE ist ein paar Sekunden verzögert (Perl dbi)
- 23. Perl, Hash in Array konvertieren
- 24. Oracle Sekunden in Stunden umwandeln: Minuten: Sekunden
- 25. Wie wandle ich ein Datum/eine Uhrzeit in Epochzeit (Unixzeit/Sekunden seit 1970) in Perl um?
- 26. EXSLT Regexp in libXSLT Perl
- 27. Reihenfolge der Zeichen der Zeichenfolge in Perl
- 28. Umwandlung von Millisekunden in Menge der Zeit Zeichenfolge
- 29. Konvertieren Zeichenfolge in die Anzahl der Sekunden
- 30. Sekunden in der Datenbank speichern - Rails
Re drucken „* Doch die Datetime :: Dauer Format nicht verwendet werden kann, ein Jahr Sekunden * zu konvertieren“, Es kann; einfach nicht leicht. Das sollte es tun: 'my $ dt1 = DateTime-> from_epoch (epoch => 0, time_zone => 'floating'); mein $ dt2 = $ dt1-> klon-> add_duration ($ dur); meine $ secs = $ dt2-> delta_ms ($ dt1) -> in_units ('sekunden'); ' – ikegami