Η ώρα και η ημερομηνία είναι κρίσιμα στοιχεία πολλών λογισμικού, από βοηθητικά προγράμματα διαχείρισης χρόνου έως εφαρμογές web. Ως προγραμματιστής, πρέπει να γνωρίζετε πώς να χειρίζεστε την ώρα και την ημερομηνία σε οποιαδήποτε γλώσσα χρησιμοποιείτε.

Στο Go, το χρόνος Το πακέτο δεσμεύει τις λειτουργίες για χειρισμό ώρας και ημερομηνίας. Μπορείτε να αποκτήσετε πρόσβαση σε αυτές τις λειτουργίες σε οποιοδήποτε αρχείο προέλευσης εισάγοντας αυτό το πακέτο.

Λοιπόν, τι σημαίνει χειρισμός ώρας και ημερομηνίας και πώς μπορείτε να χειριστείτε την ώρα και την ημερομηνία στο Go;

Τι είναι η χειραγώγηση ώρας και ημερομηνίας;

Σύμφωνα με τις απαιτήσεις του προγράμματός σας, μπορεί να χρειαστεί να ελέγξει, να διαχειριστεί ή να προσαρμόσει τη συμπεριφορά ή την αναπαράσταση ωρών και ημερομηνιών.

Διαφορετικές γλώσσες προγραμματισμού έχουν τις δικές τους λειτουργίες για χειρισμό ώρας και ημερομηνίας. Η γλώσσα Go έχει εκτεταμένες δυνατότητες, χρήσιμες για αυτόν τον σκοπό.

Ο χειρισμός ώρας και ημερομηνίας μπορεί να περιλαμβάνει:

  • Λήψη της τρέχουσας ώρας μιας τοποθεσίας ή ζώνης ώρας.
  • Εκτέλεση αριθμητικών πράξεων σε ώρες και ημερομηνίες.
  • Αλλαγή της μορφής εισόδου/εξόδου ωρών και ημερομηνιών.

Για να αρχίσετε να χειρίζεστε την ώρα και την ημερομηνία στις εφαρμογές Go σας, εισαγάγετε το χρόνος πακέτο μαζί με τα άλλα πακέτα που χρησιμοποιείτε.

εισαγωγή (
"fmt"
"χρόνος"
)

Πώς να βρείτε την τρέχουσα ώρα και ημερομηνία στο Go

Μια συνηθισμένη περίπτωση χρήσης για χειραγώγηση χρόνου είναι η λήψη της τρέχουσας τοπικής ώρας ή της τρέχουσας ώρας μιας συγκεκριμένης ζώνης ώρας ή τοποθεσίας.

Για να λάβετε την ώρα και την ημερομηνία στην τοπική σας ώρα ή σε μια συγκεκριμένη ζώνη ώρας ή τοποθεσία, μπορείτε να χρησιμοποιήσετε το χρόνος. Τώρα() και χρόνος. LoadLocation() λειτουργίες:

func κύριος(){
// Λάβετε την τρέχουσα ώρα και ημερομηνία στην τοπική ώρα
myTime := ώρα. Τώρα()
fmt. Println("Τρέχουσα ώρα σε ", ο χρόνος μου. Τοποθεσία(), " είναι: ", ο χρόνος μου)

// Ένας άλλος τρόπος για να λάβετε τοπική ώρα
τοποθεσία, _ := χρόνος. LoadLocation("Τοπικός") // ή ώρα. LoadLocation("")
fmt. Println("Τρέχουσα ώρα σε ", τοποθεσία, " είναι: ", χρόνος. Τώρα ().Σε (τοποθεσία))

// άλλη τοποθεσία
τοποθεσία, _ = χρόνος. LoadLocation("Αμερική/Νέα Υόρκη")
fmt. Println("Τρέχουσα ώρα σε ", τοποθεσία, " είναι: ", ο χρόνος μου. Σε (τοποθεσία))

// λάβετε την τρέχουσα ώρα στην Ορεινή Ζώνη ώρας (MST)
τοποθεσία, _ = χρόνος. LoadLocation("MST")
fmt. Println("Τρέχουσα ώρα σε ", τοποθεσία, " είναι: ", ο χρόνος μου. Σε (τοποθεσία))
}

Εκτέλεση του παραπάνω προγράμματος με τρέξτε το filename.go παράγει την ακόλουθη έξοδο στο τερματικό:

Η μέθοδος LoadLocation δεν υποστηρίζει κάθε τοποθεσία και συντομογραφία ζώνης ώρας. Σύμφωνα με την Μεταβείτε τεκμηρίωση, υποστηρίζει μόνο τοποθεσίες στο Βάση δεδομένων IANA.org.

Πώς να αποκτήσετε ξεχωριστά εξαρτήματα από μια δεδομένη ημερομηνία

Μπορείτε να λάβετε κάθε στοιχείο της χρονικής σήμανσης ξεχωριστά, το οποίο είναι παρόμοιο με το πότε εργασία με την ώρα και τις ημερομηνίες σε JavaScript.

Υπάρχουν πολλοί τρόποι για να το πετύχετε αυτό χρησιμοποιώντας το Go's χρόνος λειτουργίες. Αυτή η ενότητα επεξηγεί κάθε μέθοδο.

Μπορείτε να χρησιμοποιήσετε το Ημερομηνία() λειτουργία για να λάβετε την ημέρα, τον μήνα και το έτος και το Ρολόι() λειτουργία για λήψη της ώρας, των λεπτών και των δευτερολέπτων. Για παράδειγμα:

funcκύριος() {
myTime := χρόνος. Τώρα();
έτος, μήνας, ημέρα := myTime. Ημερομηνία()
fmt. Println ("Έτος :", έτος)
fmt. Println ("Μήνας :", μήνας)
fmt. Println ("Ημέρα :", ημέρα)

ώρα, λεπτά, δευτερόλεπτο := myTime. Ρολόι()
fmt. Println("Ώρα :", ώρα)
fmt. Println("Λεπτό :", min)
fmt. Println("Δευτερόλεπτα :", δευτ.)
}

Η έξοδος απεικονίζει τα διάφορα μέρη της χρονικής σφραγίδας:

Μπορείτε επίσης να λάβετε μονάδες της χρονικής σφραγίδας ξεχωριστά με το χρόνος λειτουργίες για καθένα από αυτά:

funcκύριος() {
myTime := χρόνος. Τώρα()

// Πάρτε κάθε μονάδα από Έτος σε Νανοδευτερόλεπτο
fmt. Println("Έτος :", myTime. Ετος())
fmt. Println("Month :", myTime. Μήνας())
fmt. Println("Day :", myTime. Ημέρα())
fmt. Println("Ώρα :", myTime. Ωρα())
fmt. Println("Minute :", myTime. Λεπτό())
fmt. Println("Seconds :", myTime. Δεύτερος())
fmt. Println("Nanosecond :", myTime. Νανοδευτερόλεπτο())
}

Όπως δείχνει η έξοδος, αυτό σας δίνει επίσης πρόσβαση σε νανοδευτερόλεπτα:

Τα παραδείγματα μέχρι αυτό το σημείο έχουν επικεντρωθεί στη λήψη μονάδων χρονικής σφραγίδας από την τρέχουσα ώρα. Μπορείτε να πραγματοποιήσετε τα ίδια είδη ενεργειών σε μια χρονική σήμανση που δεν είναι χρόνος. Τώρα().

Μπορείτε να εξαγάγετε το έτος, τον μήνα, την ημέρα, την ώρα, το λεπτό και το δευτερόλεπτο μιας δεδομένης ημερομηνίας. Για να το κάνετε αυτό, πρέπει είτε να αρχικοποιήσετε ένα νέο αντικείμενο ημερομηνίας είτε να αναλύσετε την ημερομηνία από μια συμβολοσειρά:

funcκύριος() {
// λάβετε μεμονωμένα στοιχεία του χρόνου από Έτος έως Νανοδευτερόλεπτο
// από μια συγκεκριμένη ημερομηνία
yourTime := χρόνος. Ημερομηνία(2020, 07, 1, 06, 32, 10, 0, χρόνος. UTC)
fmt. Println("Year :", yourTime. Ετος())
fmt. Println("Month :", yourTime. Μήνας())
fmt. Println("Day :", yourTime. Ημέρα())
fmt. Println("Ώρα :", yourTime. Ωρα())
fmt. Println("Minute :", yourTime. Λεπτό())
fmt. Println("Seconds :", yourTime. Δεύτερος())
fmt. Println("Nanosecond :", yourTime. Νανοδευτερόλεπτο())
// χρησιμοποιώντας τη συνάρτηση Clock() για να λάβετε ώρα, λεπτά και δευτερόλεπτα
yourHour, yourMin, yourSec := yourTime. Ρολόι()
fmt. Println ("Ώρα :", yourHour)
fmt. Println("Minute :", yourMin)
fmt. Println("Seconds :", yourSec)

// λάβετε την ώρα και την ημερομηνία από τη συμβολοσειρά
dateString := "2020-07-0106:32:10"
διάταξη :="2006-01-0215:04:05" // επιθυμητή μορφή εξόδου
yourTime, _ = χρόνος. Ανάλυση (διάταξη, συμβολοσειρά ημερομηνίας)
fmt. Println("Ο χρόνος σας είναι: ", yourTime)
fmt. Println("Year :", yourTime. Ετος())
fmt. Println("Month :", yourTime. Μήνας())
fmt. Println("Day :", yourTime. Ημέρα())
fmt. Println("Ώρα :", yourTime. Ωρα())
fmt. Println("Minute :", yourTime. Λεπτό())
fmt. Println("Seconds :", yourTime. Δεύτερος())
}

Αυτός ο κώδικας παράγει την ακόλουθη έξοδο:

Σημειώστε ότι η Parse() χρησιμοποιεί UTC από προεπιλογή, εάν δεν καθορίσετε μια ζώνη ώρας στη συμβολοσειρά ημερομηνίας.

Πώς να εκτελέσετε αριθμητικές πράξεις με ημερομηνία και ώρα

Οι αριθμητικές πράξεις είναι ένας άλλος τύπος χειρισμού που μπορείτε να εκτελέσετε την ώρα και την ημερομηνία στο Go. Απλές πράξεις όπως πρόσθεση, αφαίρεση και διαφορά χρόνου είναι όλες δυνατές.

Το Go σας επιτρέπει να ορίσετε χρόνος. Διάρκεια τιμές με όλες τις μονάδες χρόνου από χρόνος. Ωρα προς την χρόνος. Νανοδευτερόλεπτο. Μπορείτε να χρησιμοποιήσετε αυτές τις τιμές για να προσθέσετε ή να αφαιρέσετε χρόνο χρησιμοποιώντας Προσθήκη(). Υπάρχει επίσης ένα AddDate() συνάρτηση που λαμβάνει 3 παραμέτρους: έτη, μήνες και ημέρες για την εκτέλεση πρόσθεσης ή αφαίρεσης.

Ο παρακάτω κώδικας δείχνει τη χρήση αυτών των λειτουργιών:

funcκύριος() {
curTime := χρόνος. Τώρα()
curTime = curTime. Προσθήκη (χρόνος. Ωρα) // προσθέτει μία ώρα
fmt. Println("Η τρέχουσα ώρα είναι: ", curTime)
αύριο := ώρα ώρας. Προσθήκη (χρόνος. ώρα * 24)
fmt. Println("Αυτή η ώρα αύριο είναι: ", αύριο)
επόμενη εβδομάδα := ώρα ώρας. Προσθήκη (χρόνος. ώρα * 24 * 7)
fmt. Println("Αυτή η ώρα την επόμενη εβδομάδα είναι: ", την επόμενη εβδομάδα)

// χρησιμοποιώντας AddDate (y, m, d)
nextTomorrow := curTime. ΠροσθήκηΗμερομηνίας(0, 0, 2)
fmt. Println("Αυτή τη φορά Το επόμενο αύριο είναι: ", επόμενοΑύριο)
επόμενος μήνας := ώρα ώρας. ΠροσθήκηΗμερομηνίας(0, 1, 0)
fmt. Println("Αυτή η ώρα τον επόμενο μήνα είναι: ", επόμενος μήνας)
FiveYearsAndOneMonthAfter := CurrTime. ΠροσθήκηΗμερομηνίας(5, 1, 0)
fmt. Println("Αυτή η φορά πέντε χρόνια και ένα μήνα μετά είναι: ", FiveYearsAndOneMonthAfter)
}

Το οποίο παράγει την ακόλουθη έξοδο:

Μπορείτε επίσης να αφαιρέσετε χρόνο με Προσθήκη() και AddDate() περνώντας αρνητικές παραμέτρους. Για παράδειγμα:

funcκύριος() {
curTime := χρόνος. Τώρα()

// αφαιρέστε μία ημέρα χρησιμοποιώντας την AddDate()
χθες := curTime. ΠροσθήκηΗμερομηνίας(0, 0, -1)
fmt. Println("Αυτή η φορά χθες ήταν: ", χθες)

// αφαιρέστε έναν μήνα χρησιμοποιώντας την Add()
lastMonth := CurrTime. Προσθήκη (χρόνος. ώρα * -24 * 30)
fmt. Println("Αυτή η φορά τον περασμένο μήνα ήταν: ", lastMonth)
}

Παράγει αυτό το αποτέλεσμα:

Αν και μπορείτε να χρησιμοποιήσετε Προσθήκη() και AddDate() για να βρείτε τη διάκριση μεταξύ ημερομηνιών, το Go έχει ένα Υπο() λειτουργία που λειτουργεί λίγο διαφορετικά:

funcκύριος() {
curTime = χρόνος. Τώρα()
παρελθόν := χρόνος. Ημερομηνία(2022, χρόνος. Δεκέμβριος, 25, 12, 0, 0, 0, χρόνος. UTC)
διαφορά := παρελθόν. Δευτερεύον (curTime)
fmt. Println("Η διαφορά μεταξύ τώρα και παρελθόντος είναι: ", διαφορά)
// λάβετε τη διαφορά σε διάφορες μονάδες
χρόνια := ενθ(διαφορ. Ωρες() / 24 / 365)
fmt. Println("Έτη: ", έτη)
μήνες := ενθ(διαφορ. Ωρες() / 24 / 30)
fmt. Println("Μήνες: ", μήνες)
μέρες := ενθ(διαφορ. Ωρες() / 24)
fmt. Println("Ημέρες: ", ημέρες)
ώρες := ενθ(διαφορ. Ωρες())
fmt. Println("Ώρες: ", ώρες)
// διαφ. Minutes(), διαφορ. Δευτερόλεπτα(), διαφ. Milliseconds(), διαφ. Τα Nanoseconds() επιστρέφουν επίσης τις μονάδες τους
}

Αυτός ο κώδικας παράγει την ακόλουθη έξοδο:

Πώς να βρείτε την ώρα και την ημερομηνία σε διάφορες μορφές

Μπορείτε επίσης να λάβετε εξόδους ώρας και ημερομηνίας σε πολλές μορφές χρησιμοποιώντας το Μορφή() λειτουργία. Ακολουθούν ορισμένα κοινά στυλ μορφοποίησης:

funcκύριος() {
curTime = χρόνος. Τώρα()
// ενσωματωμένα τυπικά στυλ μορφοποίησης
fmt. Println("Η τρέχουσα ώρα είναι: ", curTime)
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC3339 είναι: ", curTime. Μορφή (χρόνος. RFC3339))
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC3339Nano είναι: ", curTime. Μορφή (χρόνος. RFC3339Nano))
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC1123 είναι: ", curTime. Μορφή (χρόνος. RFC1123))
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC1123Z είναι: ", curTime. Μορφή (χρόνος. RFC1123Z))
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC822 είναι: ", curTime. Μορφή (χρόνος. RFC822))
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC822Z είναι: ", curTime. Μορφή (χρόνος. RFC822Z))
fmt. Println("Η τρέχουσα ώρα σε μορφή RFC850 είναι: ", curTime. Μορφή (χρόνος. RFC850))
fmt. Println("Η τρέχουσα ώρα σε μορφή ANSIC είναι: ", curTime. Μορφή (χρόνος. ANSIC))
fmt. Println("Η τρέχουσα ώρα σε μορφή Unix είναι: ", curTime. Μορφή (χρόνος. UnixDate))
// προσαρμοσμένα στυλ μορφοποίησης
// ΗΗ-ΜΜ-ΕΕΕΕ ΩΩ: ΜΜ: SS
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("02-01-200615:04:05"))
// ΜΜ-ΗΗ-ΕΕΕΕ ΩΩ: ΜΜ: SS
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("01-02-200615:04:05"))
// ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ: ΜΜ: SS
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("2006-01-0215:04:05"))
// ΗΗ.ΜΜ.ΕΕΕΕ
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("02.01.2006"))
// ΗΗ/ΜΜ/ΕΕΕΕ
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("02/01/2006"))
// 01 Φεβρουαρίου 2006
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("02 Ιαν 2006"))
// 01 Φεβρουαρίου 2006 Δευτέρα
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("02 Φεβρουάριος 2006 Δευτέρα"))
// 01 Φεβρουαρίου 2006 Δευτ. 15:04:05
fmt. Println("Η τρέχουσα ώρα σε προσαρμοσμένη μορφή είναι: ", curTime. Μορφή("02 Φεβρουάριος 2006 Δευτ 15:04:05"))
}

Αυτοί οι διαφορετικοί τύποι μορφοποίησης παράγουν την ακόλουθη έξοδο:

Χειρισμός ώρας και ημερομηνίας στο Go

Ο κατάλογος των χειρισμών που μπορείτε να κάνετε σε ώρες και ημερομηνίες είναι σχεδόν ατελείωτος. Ανάλογα με το εύρος της αίτησής σας, μπορεί να χρειαστεί να εκτελέσετε πολλές διαφορετικές λειτουργίες ημερομηνίας/ώρας.

Για οποιαδήποτε περίπτωση χρήσης μπορεί να έχετε, το χρόνος Το πακέτο είναι πολύ λειτουργικό και έχει πολλές ενσωματωμένες μεθόδους.

Μπορείτε να χρησιμοποιήσετε τη χειραγώγηση ημερομηνίας και ώρας για να δημιουργήσετε μια απλή εφαρμογή ημερήσιου σχεδιασμού ή προγραμματιστή εργασιών.