Ura in datum sta ključna sestavna dela številnih programov, od pripomočkov za upravljanje časa do spletnih aplikacij. Kot programer morate znati manipulirati z uro in datumom v katerem koli jeziku, ki ga uporabljate.
V Go, čas paket združuje funkcije za manipulacijo časa in datuma. Do teh funkcij lahko dostopate v kateri koli izvorni datoteki z uvozom tega paketa.
Torej, kaj pomeni manipulirati z uro in datumom in kako lahko manipulirate z uro in datumom v Go?
Kaj je manipulacija s časom in datumom?
V skladu z zahtevami vašega programa bo morda moral nadzorovati, upravljati ali prilagoditi vedenje ali predstavitev ur in datumov.
Različni programski jeziki imajo lastne funkcije za manipulacijo časa in datuma. Jezik Go ima obsežne zmogljivosti, uporabne za ta namen.
Manipulacija časa in datuma lahko vključuje:
- Pridobivanje trenutnega časa lokacije ali časovnega pasu.
- Izvajanje aritmetičnih operacij na časih in datumih.
- Spreminjanje vhodno/izhodne oblike ur in datumov.
Če želite začeti manipulirati z uro in datumom v svojih aplikacijah Go, uvozite
čas skupaj z drugimi paketi, ki jih uporabljate.uvoz (
"fmt"
"čas"
)
Kako pridobiti trenutni čas in datum v Go
Pogost primer uporabe za manipulacijo časa je pridobivanje trenutnega lokalnega časa ali trenutnega časa določenega časovnega pasu ali lokacije.
Če želite dobiti uro in datum v vašem lokalnem času ali v določenem časovnem pasu ali lokaciji, lahko uporabite čas. zdaj() in čas. LoadLocation() funkcije:
funk glavni(){
// Pridobite trenutni čas in datum v lokalnem času
myTime := ime. zdaj()
fmt. Println("Trenutni čas v ", moj čas. Lokacija(), " je: ", moj čas)// Drug način za pridobitev lokalnega časa
lokacija, _ := čas. LoadLocation("Lokalno") // ali čas. LoadLocation("")
fmt. Println("Trenutni čas v ", lokacija, " je: ", čas. Zdaj().V (lokacija))// druga lokacija
lokacija, _ = čas. LoadLocation("Amerika/New_York")
fmt. Println("Trenutni čas v ", lokacija, " je: ", moj čas. V (lokacija))
// pridobite trenutni čas v gorskem časovnem pasu (MST)
lokacija, _ = čas. LoadLocation("MST")
fmt. Println("Trenutni čas v ", lokacija, " je: ", moj čas. V (lokacija))
}
Zagon zgornjega programa z pojdi zaženi filename.go ustvari naslednji izhod v terminalu:
Metoda LoadLocation ne podpira vsake okrajšave lokacije in časovnega pasu. Glede na Pojdi na dokumentacijo, podpira samo lokacije v Baza podatkov IANA.org.
Kako pridobiti ločene komponente od danega datuma
Vsako komponento časovnega žiga lahko dobite ločeno, kar je podobno kdaj delo s časom in datumi v JavaScriptu.
Obstaja veliko načinov, kako to doseči z uporabo Go's čas funkcije. Ta razdelek ponazarja vsako metodo.
Lahko uporabite datum() funkcijo za pridobitev dneva, meseca in leta ter ura() funkcijo za pridobitev ure, minute in sekund. Na primer:
funkglavni() {
myTime := čas. Zdaj ();
leto, mesec, dan := myTime. datum()
fmt. Println("Leto :", leto)
fmt. Println("Mesec :", mesec)
fmt. Println("Dan :", dan)
ura, min, sekunda := moj čas. ura()
fmt. Println("Ura :", ura)
fmt. Println("Minuta :", min)
fmt. Println("Sekunde :", sek)
}
Izhod ponazarja različne dele časovnega žiga:
Enote časovnega žiga lahko dobite tudi posamično z čas funkcije za vsakega od njih:
funkglavni() {
myTime := čas. zdaj()
// pridobi vsako enoto iz leta v nanosekundo
fmt. Println("Leto :", myTime. Leto())
fmt. Println("Mesec :", myTime. mesec())
fmt. Println("Dan :", myTime. dan())
fmt. Println("Ura :", myTime. ura ())
fmt. Println("Minuta :", myTime. minuta())
fmt. Println("Sekunde :", myTime. drugi())
fmt. Println("Nanosekunda :", myTime. Nanosekunda())
}
Kot prikazuje rezultat, vam to omogoča tudi dostop do nanosekund:
Primeri do te točke so se osredotočali na pridobivanje enot časovnega žiga iz trenutnega časa. Enake vrste dejanj lahko izvedete na časovnem žigu, ki ni čas. zdaj().
Izvlečete lahko leto, mesec, dan, uro, minuto in sekundo določenega datuma. Če želite to narediti, morate inicializirati nov objekt datuma ali razčleniti datum iz niza:
funkglavni() {
// pridobi posamezne komponente časa od leta do nanosekunde
// od določenega datuma
vaš čas := čas. Datum (2020, 07, 1, 06, 32, 10, 0, čas. UTC)
fmt. Println("Leto :", vaš čas. Leto())
fmt. Println("Mesec :", vaš čas. mesec())
fmt. Println("Dan :", vaš čas. dan())
fmt. Println("Ura :", vaš čas. ura ())
fmt. Println("Minuta :", vaš čas. minuta())
fmt. Println("Sekunde :", vaš čas. drugi())
fmt. Println("Nanosekunda :", vaš čas. Nanosekunda())
// z uporabo funkcije Clock() za pridobitev ure, minute in sekunde
vaša ura, vaša minuta, vaša sekunda := vaš čas. ura()
fmt. Println("Ura :", vašaUra)
fmt. Println("Minuta :", vaša Min)
fmt. Println("Sekunde :", yourSec)
// pridobi čas in datum iz niza
dateString := "2020-07-0106:32:10"
postavitev := "2006-01-0215:04:05" // vaš želeni izhodni format
vaš čas, _ = čas. Razčleni (postavitev, dateString)
fmt. Println("Vaš čas je: ", vaš čas)
fmt. Println("Leto :", vaš čas. Leto())
fmt. Println("Mesec :", vaš čas. mesec())
fmt. Println("Dan :", vaš čas. dan())
fmt. Println("Ura :", vaš čas. ura ())
fmt. Println("Minuta :", vaš čas. minuta())
fmt. Println("Sekunde :", vaš čas. drugi())
}
Ta koda proizvede naslednje rezultate:
Upoštevajte, da Parse() uporablja UTC privzeto, če v datumskem nizu ne navedete časovnega pasu.
Kako izvajati aritmetične operacije z datumom in uro
Aritmetične operacije so še ena vrsta manipulacije, ki jo lahko izvajate s časom in datumom v Go. Možne so preproste operacije, kot so seštevanje, odštevanje in časovna razlika.
Go vam omogoča definiranje čas. Trajanje vrednosti z vsemi časovnimi enotami od čas. ura do čas. Nanosekunda. Te vrednosti lahko uporabite za dodajanje ali odštevanje časa z uporabo Dodaj(). Obstaja tudi DodajDatum() funkcija, ki zajema 3 parametre: leta, mesece in dneve za izvajanje seštevanja ali odštevanja.
Naslednja koda prikazuje uporabo teh funkcij:
funkglavni() {
curTime := čas. zdaj()
curTime = curTime. Dodajte (čas. ura) // doda eno uro
fmt. Println("Trenutni čas je: ", curTime)
jutri := curTime. Dodajte (čas. ura * 24)
fmt. Println("Tokrat jutri je: ", jutri)
naslednji teden := curtime. Dodajte (čas. ura * 24 * 7)
fmt. Println("Ta čas naslednji teden je: ", nextWeek)
// z uporabo AddDate (y, m, d)
nextTomorrow := curTime. AddDate(0, 0, 2)
fmt. Println("Tokrat Naslednji jutri je: ", nextTomorrow)
naslednji mesec := curtime. AddDate(0, 1, 0)
fmt. Println("Ta čas naslednji mesec je: ", nextMonth)
pet let in en mesec po := curtime. AddDate(5, 1, 0)
fmt. Println("Ta čas po petih letih in enem mesecu je: ", petYearsAndOneMonthAfter)
}
Kar ustvari naslednji rezultat:
Čas lahko odštejete tudi z Dodaj() in DodajDatum() s posredovanjem negativnih parametrov. Na primer:
funkglavni() {
curTime := čas. zdaj()// odštejemo en dan z uporabo AddDate()
včeraj := curTime. AddDate(0, 0, -1)
fmt. Println("Ta čas včeraj je bil: ", včeraj)
// odštejemo en mesec z uporabo Add()
zadnji mesec := curtime. Dodajte (čas. ura * -24 * 30)
fmt. Println("Ta čas prejšnji mesec je bil: ", lastMonth)
}
Ustvari ta rezultat:
Čeprav lahko uporabite Dodaj() in DodajDatum() da bi našli razliko med datumi, ima Go a Pod() funkcija, ki deluje nekoliko drugače:
funkglavni() {
curTime = čas. zdaj()
preteklost := čas. Datum (2022, čas. december, 25, 12, 0, 0, 0, čas. UTC)
diff := preteklost. Sub (curTime)
fmt. Println("Razlika med zdaj in preteklostjo je: ", diff)
// dobimo razliko v različnih enotah
leta := int(razl. Ure() / 24 / 365)
fmt. Println("Leta: ", leta)
meseci := int(razl. Ure() / 24 / 30)
fmt. Println("Meseci: ", meseci)
dni := int(razl. Ure() / 24)
fmt. Println("Dnevi: ", dnevi)
ure := int(razl. Ure())
fmt. Println("Ure: ", ure)
// razl. minute(), razl. Sekunde(), razl. Milisekund(), razl. Nanoseconds() prav tako vrne svoje enote
}
Ta koda proizvede naslednje rezultate:
Kako pridobiti čas in datum v različnih oblikah
Prav tako lahko dobite izhode časa in datuma v več oblikah z uporabo Oblika () funkcijo. Tukaj je nekaj pogostih stilov oblikovanja:
funkglavni() {
curTime = čas. zdaj()
// vgrajeni standardni slogi oblikovanja
fmt. Println("Trenutni čas je: ", curTime)
fmt. Println("Trenutni čas v formatu RFC3339 je: ", curTime. Oblika (čas. RFC3339))
fmt. Println("Trenutni čas v formatu RFC3339Nano je: ", curTime. Oblika (čas. RFC3339Nano))
fmt. Println("Trenutni čas v formatu RFC1123 je: ", curTime. Oblika (čas. RFC1123))
fmt. Println("Trenutni čas v formatu RFC1123Z je: ", curTime. Oblika (čas. RFC1123Z))
fmt. Println("Trenutni čas v formatu RFC822 je: ", curTime. Oblika (čas. RFC822))
fmt. Println("Trenutni čas v formatu RFC822Z je: ", curTime. Oblika (čas. RFC822Z))
fmt. Println("Trenutni čas v formatu RFC850 je: ", curTime. Oblika (čas. RFC850))
fmt. Println("Trenutni čas v formatu ANSIC je: ", curTime. Oblika (čas. ANSIC))
fmt. Println("Trenutni čas v formatu Unix je: ", curTime. Oblika (čas. UnixDate))
// slogi oblikovanja po meri
// DD-MM-LLLL HH: MM: SS
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("02-01-200615:04:05"))
// MM-DD-LLLL HH: MM: SS
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("01-02-200615:04:05"))
// LLLL-MM-DD HH: MM: SS
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("2006-01-0215:04:05"))
// DD.MM.LLLL
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("02.01.2006"))
// DD/MM/LLLL
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("02/01/2006"))
// 1. februar 2006
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("02 Jan 2006"))
// 01. februar 2006 ponedeljek
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("02 februar 2006 ponedeljek"))
// 01. februar 2006 Pon 15:04:05
fmt. Println("Trenutni čas v formatu po meri je: ", curTime. Oblika ("02 februar 2006 pon 15:04:05"))
}
Te različne vrste oblikovanja ustvarijo naslednje rezultate:
Manipulacija časa in datuma v Go
Seznam manipulacij, ki jih lahko izvedete ob urah in datumih, je skoraj neskončen. Odvisno od obsega vaše aplikacije boste morda morali izvesti veliko različnih datumskih/časovnih operacij.
Za vsak primer uporabe, ki ga morda imate, čas paket je zelo funkcionalen in ima veliko vgrajenih metod.
Z manipulacijo datuma in časa lahko ustvarite preprost dnevni planer ali aplikacijo za načrtovanje opravil.