Οι ζώνες ώρας είναι ζωτικής σημασίας για κάθε εφαρμογή που ασχολείται με ημερομηνίες και ώρες. Φυσικά, αυτό ισχύει ιδιαίτερα για εφαρμογές που εξυπηρετούν χρήστες σε διάφορες ηπείρους και τοποθεσίες. Οι ζώνες ώρας καθορίζουν τη μετατόπιση από τη Συντονισμένη Παγκόσμια Ώρα (UTC) για συγκεκριμένες τοποθεσίες σε όλο τον κόσμο. Διαδραματίζουν ζωτικό ρόλο στη διασφάλιση ακριβούς και αξιόπιστου χειρισμού του χρόνου.
Το Go παρέχει το πακέτο ώρας στην τυπική του βιβλιοθήκη για εργασία με ζώνες ώρας και ώρας. Μπορείτε να ανακτήσετε και να μετατρέψετε ζώνες ώρας σε διάφορες τοποθεσίες χρησιμοποιώντας το πακέτο ώρας.
Το πακέτο του χρόνου
ο χρόνος πακέτο παρέχει λειτουργικότητα για δουλεύοντας με ώρες και ημερομηνίες, μέτρηση και εμφάνιση ώρας και χειρισμός ημερομηνιών χρησιμοποιώντας ένα Γρηγοριανό ημερολόγιο χωρίς δίσεκτα δευτερόλεπτα.
Το πακέτο χρόνου παρέχει α χρόνοςτύπος κατασκευής που περιέχει το πεδίο τοποθεσίας που μπορείτε να χρησιμοποιήσετε για να ορίσετε ζώνες ώρας.
Μπορείτε να εισαγάγετε το πακέτο χρόνου με μια δήλωση εισαγωγής.
εισαγωγή"χρόνος"
Εδώ είναι ο τύπος της χρονικής δομής και τα πεδία της. Τα πεδία δεν έχουν εξαχθεί, επομένως απουσιάζουν από την επίσημη τεκμηρίωση.
πακέτο κύριος
τύπος χρόνος struct {
// wall είναι ο χρόνος τοίχου στη μορφή που επιστρέφεται από το runtime.nanotime()
// λειτουργία.
τείχος uint64// ext είναι η μονοτονική ένδειξη του ρολογιού στη μορφή που επιστρέφεται από
// runtime.nanotime().
εσωτ int64// loc είναι ένας δείκτης στη δομή Location που σχετίζεται με αυτήν την ώρα.
loc *Τοποθεσία
}τύπος Τοποθεσία struct {
// όνομα είναι το όνομα της ζώνης ώρας, όπως "UTC" ή "PST".
όνομα σειρά// ζώνη περιέχει πληροφορίες σχετικά με τη συντομογραφία της ζώνης ώρας, μετατόπιση,
// και κανόνας για μια ζώνη ώρας στην τοποθεσία.
ζώνη []ζώνη// tx περιέχει πληροφορίες σχετικά με το πότε η συντομογραφία ζώνης ώρας ή
// μετατόπιση αλλαγών για μια τοποθεσία.
tx []zoneTrans// επέκταση περιέχει το όνομα μιας γονικής ζώνης ώρας εάν αυτή η τοποθεσία
// εκτείνεται από ένα άλλο.
επεκτείνω σειρά// cacheStart και cacheEnd είναι χρονικές σημάνσεις Unix που καθορίζουν το εύρος
// για το οποίο ισχύει το πεδίο cacheZone.
cacheStart int64
cacheEnd int64
// cacheZone δείχνει τη ζώνη που είναι έγκυρη για την ώρα
// εύρος που ορίζεται από cacheStart και cacheEnd.
cacheZone *ζώνη
}
Πολλές μέθοδοι χρησιμοποιούν το Time και Τοποθεσία δομές, συμπεριλαμβανομένων των μεθόδων ζώνης ώρας.
Φόρτωση πληροφοριών ζώνης ώρας
Η φόρτωση πληροφοριών ζώνης ώρας είναι μία από τις βασικές λειτουργίες κατά την εργασία με ζώνες ώρας. ο LoadLocation μέθοδος παρέχει λειτουργικότητα για τη φόρτωση πληροφοριών ζώνης ώρας από το Βάση δεδομένων ζώνης ώρας IANA. ο LoadLocation Η μέθοδος λαμβάνει το όνομα της ζώνης ώρας και επιστρέφει τις πληροφορίες τοποθεσίας και ένα σφάλμα χειρισμού. Αφού φορτώσει τις πληροφορίες της ζώνης ώρας, δημιουργεί ένα χρόνος παράδειγμα δομής που σχετίζεται με τη ζώνη ώρας.
εισαγωγή (
"fmt"
"χρόνος"
)funcκύριος() {
// Φόρτωση της τοποθεσίας ζώνης ώρας για Αμερική/Νέα Υόρκη
loc, err := χρόνος. LoadLocation("America/New_York")αν λάθος!= μηδέν {
fmt. Println("Σφάλμα φόρτωσης τοποθεσίας:", λάθος)
ΕΠΙΣΤΡΟΦΗ
}
// Λάβετε την τρέχουσα ώρα σε μια τοποθεσία
τώρα := ώρα. Now().In (loc)
fmt. Println("Τρέχουσα ώρα στη Νέα Υόρκη:", τώρα)
}
ο Σε μέθοδος του Τώρα Η λειτουργία καταλαμβάνει μια τοποθεσία και εκτυπώνει το χρόνο εκεί:
Επιπλέον, μπορείτε να χρησιμοποιήσετε το Σταθερή Ζώνη μέθοδος φόρτωσης της τρέχουσας ώρας σε μια τοποθεσία, εάν γνωρίζετε τη συμβολοσειρά τοποθεσίας και τη μετατόπιση της ζώνης ώρας από το UTC. Αρχικά, θα χρειαστεί να φορτώσετε την τρέχουσα ώρα σε UTC και, στη συνέχεια, θα χρησιμοποιήσετε τη μέθοδο FixedZone για να φορτώσετε το τοποθεσία με βάση τη συμβολοσειρά και μετατόπιση πριν περάσει η τοποθεσία στη μέθοδο In the time παράδειγμα.
εισαγωγή (
"fmt"
"χρόνος"
)funcκύριος() {
// Λάβετε την τρέχουσα ώρα σε UTC
τώρα := ώρα. Τώρα().UTC()// Ορίστε τη ζώνη ώρας για το Λάγος
lagos := τώρα. Εγκαίρως. ΣταθερήΖώνη("WAT", 3600))
// Εκτύπωση της τρέχουσας ώρας και στις δύο θέσεις
fmt. Println("Τρέχουσα ώρα στο Λάγος:", Λάγος)
}
ο κύριος Η λειτουργία εκτυπώνει την τρέχουσα ώρα στο Lagos στην κονσόλα.
Μέτρηση διάρκειας ζώνης ώρας
Το πακέτο χρόνου παρέχει το Ζώνη μέθοδος για την ανάκτηση της συντομογραφίας και της μετατόπισης της ζώνης ώρας που σχετίζεται με α χρόνος. χρόνος αξία. Η μέθοδος Zone επιστρέφει τη συμβολοσειρά που αντιπροσωπεύει τη συντομογραφία της ζώνης ώρας (π.χ. "EST" για "America/New_York") και έναν ακέραιο αριθμό που αντιπροσωπεύει τον αριθμό των δευτερολέπτων ανατολικά του UTC.
εισαγωγή (
"fmt"
"χρόνος"
)funcκύριος() {
// Φόρτωση της τοποθεσίας ζώνης ώρας για Αμερική/Νέα Υόρκη
loc, err := χρόνος. LoadLocation("America/New_York")αν λάθος!= μηδέν {
fmt. Println("Σφάλμα φόρτωσης τοποθεσίας:", λάθος)
ΕΠΙΣΤΡΟΦΗ
}// Λάβετε την τρέχουσα ώρα σε UTC και την καθορισμένη τοποθεσία
t1 := χρόνος. Τώρα()
t2 := t1.In (loc)// Λάβετε τη μετατόπιση σε δευτερόλεπτα για κάθε ζώνη ώρας
//για τις ζώνες ώρας
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()// Υπολογίστε τη διάρκεια της μετατόπισης της ζώνης ώρας
// μεταξύ UTC και America/New_York
διάρκεια := offset2 - offset1
fmt. Printf("Η διάρκεια μετατόπισης ζώνης ώρας" +
" μεταξύ UTC και Νέας Υόρκης είναι: %d δευτερόλεπτα", διάρκεια)
}
Στην κύρια συνάρτηση, η μέθοδος Zone μετρά τη διάρκεια της μετατόπισης ζώνης ώρας μεταξύ δύο ζωνών ώρας (ώρα. Τιμές χρόνου). ο t1 μεταβλητή είναι η τρέχουσα ώρα σε UTC και η t2 μεταβλητή είναι η τρέχουσα ώρα στη ζώνη ώρας "America/New_York".
Η λειτουργία εκτυπώνει το διάρκεια μεταβλητή (η διαφορά στη μετατόπιση μεταξύ των ζωνών ώρας) που αντιπροσωπεύει τη μετατόπιση της ζώνης ώρας σε δευτερόλεπτα.
Αξιολόγηση χρόνου μεταξύ ζωνών ώρας
Μπορείτε να αξιολογήσετε την ώρα μεταξύ των ζωνών ώρας εάν γνωρίζετε τη διάρκεια μεταξύ των ζωνών ώρας. Μπορείτε να χρησιμοποιήσετε το Προσθήκη μέθοδος της μεθόδου In του χρόνου σας. Παράδειγμα δομής ώρας για προσθήκη διάρκειας στην ώρα σε μια ζώνη ώρας.
εισαγωγή (
"κούτσουρο"
"χρόνος"// εισαγωγή του πακέτου χρόνου
)funcΑξιολόγηση Χρόνος(ώρα. Χρόνος, χρόνος διάρκειας. Διάρκεια)χρόνος.χρόνος {
// φορτώστε την τοποθεσία για Αφρική/Λάγος
τοποθεσία, λάθος := χρόνος. LoadLocation("Αφρική/Λάγος")
αν λάθος!= μηδέν {
κούτσουρο. Println("Παρουσιάστηκε σφάλμα κατά τη φόρτωση της τοποθεσίας")
}
ΕΠΙΣΤΡΟΦΗ t. Σε (τοποθεσία). Προσθήκη (διάρκεια)
}
ο Αξιολόγηση Χρόνος η λειτουργία διαρκεί λίγο. Χρονική περίπτωση και διάρκεια τύπου χρόνος. Διάρκεια, επιστρέφοντας την ώρα στη ζώνη ώρας. Φορτώνει την τρέχουσα ώρα στο "Africa/Lagos" και προσθέτει μια διάρκεια στην ώρα.
Χειριστείτε την ώρα και την ημερομηνία με το πακέτο ώρας
Το πακέτο χρόνου είναι πολύ ευέλικτο για εργασία τόσο με ώρες όσο και με ημερομηνίες. Το πακέτο χρόνου παρέχει λειτουργίες όπως η Unix() για τη μετατροπή του χρόνου σε χρόνο Unix, η Sleep() για την παύση των goroutine και η Format() για τη μορφοποίηση των τιμών του χρόνου σε συμβολοσειρά.