gmtime#
Μετατρέπει έναν χρόνο epoch σε αναλυτικό χρόνο UTC, είτε ως λίστα 9 στοιχείων είτε ως συμβολοσειρά τύπου ctime(3).
Η gmtime είναι η localtime εκφρασμένη στη ζώνη ώρας Greenwich. Παίρνει έναν ακέραιο αριθμό δευτερολέπτων από την epoch - τον τύπο τιμής που επιστρέφει η time - και επιστρέφει είτε τα επιμέρους ημερολογιακά πεδία (σε περιβάλλον λίστας) είτε μια έτοιμη προς εκτύπωση συνοπτική συμβολοσειρά (σε βαθμωτό περιβάλλον). Καμία αναζήτηση ζώνης ώρας, κανένα TZ, κανένα DST: το αποτέλεσμα είναι πάντοτε UTC.
Σύνοψη#
gmtime EXPR
gmtime
Η gmtime χωρίς όρισμα χρησιμοποιεί την τρέχουσα time.
Τι επιστρέφεται#
Σε περιβάλλον λίστας, μια λίστα εννέα στοιχείων που προέρχεται απευθείας από το C struct tm:
# 0 1 2 3 4 5 6 7 8
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= gmtime(time);
Δείκτης | Πεδίο | Εύρος | Σημειώσεις |
|---|---|---|---|
0 |
|
| το 60 επιτρέπει ένα θετικό leap second |
1 |
|
| |
2 |
|
| |
3 |
|
| με αρχή το 1 |
4 |
|
| με αρχή το 0 - ο Ιανουάριος είναι 0, ο Δεκέμβριος είναι 11 |
5 |
| έτη από το 1900 - προσθέστε | |
6 |
|
| η Κυριακή είναι 0 |
7 |
|
| 0 είναι η 1η Ιανουαρίου· 365 μόνο σε δίσεκτα έτη |
8 |
|
| πάντοτε 0 για την |
Σε βαθμωτό περιβάλλον, μία και μόνη αγγλική συμβολοσειρά μορφοποιημένη ως ctime(3):
my $s = gmtime; # "Thu Oct 13 04:54:34 1994"
Η βαθμωτή μορφή είναι πάντοτε αγγλική και ανεξάρτητη τοπικών ρυθμίσεων. Για μια συμβολοσειρά που αναγνωρίζει τοπικές ρυθμίσεις ή έχει διαφορετική μορφή, φτιάξτε την από τη μορφή λίστας με την POSIX::strftime.
Καθολική κατάσταση που επηρεάζει#
Καμία. Η gmtime δεν διαβάζει το $ENV{TZ}, δεν συμβουλεύεται τις τοπικές ρυθμίσεις του διερμηνέα και δεν εξαρτάται ούτε τροποποιεί καμία από τις ειδικές μεταβλητές της Perl. Με το ίδιο EXPR, επιστρέφει πάντα το ίδιο αποτέλεσμα.
Χωρίς όρισμα, διαβάζει τον τρέχοντα πραγματικό χρόνο μέσω της time.
Παραδείγματα#
Τρέχον UTC αναλυμένο στα πεδία του, με τις παγίδες του 0-δείκτη μήνα και του έτους-από-1900 να αντιμετωπίζονται και οι δύο:
my @abbr = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my ($sec, $min, $hour, $mday, $mon, $year) = gmtime;
printf "%s %d, %d %02d:%02d:%02d UTC\n",
$abbr[$mon], $mday, $year + 1900, $hour, $min, $sec;
# e.g. "Apr 23, 2026 14:07:09 UTC"
Η βαθμωτή μορφή - μία συμβολοσειρά σταθερής μορφής, χρήσιμη για αρχεία καταγραφής:
my $stamp = gmtime;
print "[$stamp] startup\n";
# "[Thu Apr 23 14:07:09 2026] startup"
Μορφοποιήστε τη λίστα με την POSIX::strftime όταν θέλετε ISO-8601 ή απόδοση με επίγνωση τοπικών ρυθμίσεων:
use POSIX qw(strftime);
my $iso = strftime "%Y-%m-%dT%H:%M:%SZ", gmtime;
# e.g. "2026-04-23T14:07:09Z"
Μετατρέψτε μια αποθηκευμένη epoch (όχι τον τρέχοντα χρόνο) - οποιαδήποτε ακέραια δευτερόλεπτα από την 1970-01-01 UTC λειτουργούν:
my $epoch = 1_700_000_000;
my @t = gmtime($epoch);
printf "%04d-%02d-%02d\n", $t[5] + 1900, $t[4] + 1, $t[3];
# "2023-11-14"
Το $isdst είναι πάντοτε 0 υπό την gmtime - μην το χρησιμοποιείτε για να ανιχνεύσετε το DST. Καλέστε την localtime αν χρειάζεστε αυτή την πληροφορία:
my $dst_here = (localtime)[8]; # 0 or 1 depending on local zone
my $dst_utc = (gmtime)[8]; # always 0
Οριακές περιπτώσεις#
Η γυμνή κλήση χρησιμοποιεί τον τρέχοντα χρόνο: η
gmtimeχωρίς όρισμα ισούται μεgmtime(time). Μέσα σε παρεμβολή ή σε λίστα που μπορεί να καταπιεί την κλήση, χρησιμοποιήστε παρενθέσεις:gmtime().Το περιβάλλον λίστας έναντι βαθμωτού είναι φέρον. Σε περιβάλλον λίστας λαμβάνετε εννέα αριθμούς· σε βαθμωτό περιβάλλον λαμβάνετε μία συμβολοσειρά. Εξαναγκάζοντας βαθμωτό σε γυμνή κλήση μέσα σε λίστα:
print gmtime, "\n"; # nine digits, no spaces print scalar gmtime, "\n"; # "Thu Apr 23 14:07:09 2026"
Το
$monέχει αρχή το 0, το$yearμετράται από το 1900. Δύο από τα πιο κοινά σφάλματα της Perl. Για πλήρες ημερολογιακό έτος γράψτε$year + 1900· για μήνα με αρχή το 1 γράψτε$mon + 1.Το
$mdayέχει αρχή το 1, το$ydayέχει αρχή το 0. Αντικατοπτρίζει επακριβώς το Cstruct tm- ασυνεπές, αλλά σταθερό.$sec == 60σε θετικό leap second. Κώδικας που επικυρώνει με$sec <= 59θα απορρίψει νόμιμες τιμές.Αρνητικές τιμές epoch αναπαριστούν ημερομηνίες πριν από την 1970-01-01 UTC και γίνονται δεκτές σε πλατφόρμες των οποίων η
gmtime(3)τις δέχεται - όπως το Linux. Ηgmtime(-1)επιστρέφει 1969-12-31 23:59:59 UTC.Τα κλασματικά δευτερόλεπτα απορρίπτονται. Η
EXPRαποκόπτεται προς το μηδέν πριν από τη μετατροπή· τοgmtime(1.9)ισούται μεgmtime(1). Για υπο-δευτερολεπτική ακρίβεια, κρατήστε ξεχωριστά το δικό σας κλασματικό μέρος και μορφοποιήστε το χωριστά.Καμία συντομογραφία ζώνης ώρας στη βαθμωτή μορφή. Σε αντίθεση με την έξοδο
ctime(3)τηςlocaltimeσε ορισμένες πλατφόρμες, η βαθμωτή μορφή τηςgmtimeδεν περιλαμβάνει ποτέ όνομα ζώνης. Είναι πάντα η μορφή πέντε πεδίων"Wdy Mon DD HH:MM:SS YYYY".Το
$isdstείναι πάντοτε0, όχιundefκαι όχι-1. Μην το ελέγχετε ως προς την αλήθεια υπό τηνgmtime· η απάντηση δεν έχει νόημα.
Εναλλακτικές και συμπληρωματικά#
Η αντίστροφη πορεία - από αναλυτικά πεδία πίσω σε epoch - είναι δουλειά του αρθρώματος
Time::Local. Χρησιμοποιήστε εκεί τηνtimegm(UTC) ή τηνtimelocal(τοπική ζώνη):use Time::Local qw(timegm); my $epoch = timegm($sec, $min, $hour, $mday, $mon, $year);
Αντικειμενοστρεφή προσπέλαση βάσει ονόματος πεδίου προσφέρει το
Time::Piece, που υπερφορτώνει τιςlocaltimeκαιgmtimeώστε να επιστρέφουν αντικείμενα με μεθόδους->year,->mon,->mdayκ.λπ. Οι συμβάσεις πεδίων εκεί έχουν προσαρμοστεί - τοyearείναι ήδη το πλήρες έτος, τοmonείναι ήδη με αρχή το 1 - οπότε κώδικας γραμμένος για τοTime::Pieceδεν μπορεί να αναμιχθεί απερίσκεπτα με κώδικα γραμμένο για την ενσωματωμένη μορφή λίστας.Η αναγνώσιμη από ανθρώπους μορφοποίηση ανήκει στην
POSIX::strftime· τροφοδοτήστε την απευθείας με τη λίστα που επιστρέφει ηgmtime.Εκτενής αριθμητική ημερομηνιών, ζώνες ώρας, διάρκειες - καταφύγετε στο
DateTimeτου CPAN. Ηgmtimeείναι το ελάχιστο βιώσιμο πρωτογενές δομικό στοιχείο· τοDateTimeείναι η πλήρης βιβλιοθήκη.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
localtime- η ίδια μετατροπή, αλλά στην τοπική ζώνη ώρας· εκεί το$isdstέχει νόημαtime- παράγει την τιμή epoch που καταναλώνει ηgmtimePOSIX::strftime- μορφοποιήστε τη λίστα 9 στοιχείων σε αυθαίρετη συμβολοσειρά ημερομηνίας (ISO-8601, με επίγνωση τοπικών ρυθμίσεων κ.λπ.)Time::Local- αντίστροφη πράξη: κατασκευάζει μια epoch από αναλυτικά πεδία UTC ή τοπικάTime::Piece- αντικειμενοστρεφές περιτύλιγμα γύρω από τιςgmtime/localtimeμε ονομασμένες μεθόδους προσπέλασης