Savladajte osnovne koncepte za manipuliranje datumima i vremenima u svojim Rust projektima.

Rukovanje datumom i vremenom ključni je aspekt mnogih aplikacija, od planiranja zadataka i analize podataka do izvođenja izračuna i osiguravanja prikaza podataka.

Rust ima mnogo biblioteka i modula za rad s datumima i vremenima. Rust pruža ugrađeni vrijeme sanduk za operacije povezane s vremenom, a Chrono biblioteka interoperira s mnogim drugim Rust bibliotekama za operacije datuma i vremena.

Početak rada s datumom i vremenom u Rustu

Chrono je biblioteka datuma i vremena za rukovanje datumima, vremenima, vremenskim zonama i trajanjima u Rustu. Chrono pruža višestruke značajke i intuitivni API za tipove datuma i vremena, vremenske zone i pomak datuma i vremena, trajanje i interval, raščlanjivanje i oblikovanje te rad s kalendarima.

Chrono se dobro slaže s drugim bibliotekama u Rust ekosustavu i besprijekorno se integrira sa standardom I/O značajke knjižnice koje vam omogućuju čitanje i pisanje Chrono vrijednosti datuma i vremena iz i u različite potoci.

instagram viewer

Dodatno, Chrono ima podršku za serijalizaciju i deserijalizaciju kroz Serde sanduk, što olakšava rad s Chrono tipovima u JSON, YAML i drugim formatima. Chronoova integracija sa Serdeom čini ga prikladnim za operacije datuma i vremena izrada web aplikacija u Rustu.

Možete koristiti Chrono za dohvaćanje svoje lokacije UTC (Univerzalno koordinirano vrijeme) za brojne operacije poput konverzija.

Dodajte ovu direktivu u ovisnosti dio vašeg Teret.toml datoteku za instaliranje i korištenje krono sanduk:

[ovisnosti]
krono = "0.4.24"

Nakon instaliranja krono sanduk, možete koristiti krono u vašem Rust projektu uvozom sanduka na sljedeći način:

koristiti krono:: preludij::*;

Chrono je jedan od Rust sanduka koji će vam trebati u vašem razvojnom arsenalu budući da pruža većinu značajki za operacije datuma i vremena.

Vremenske zone i rukovanje vremenom u Rustu s Chronom

Vremenske zone osiguravaju da su vremenske oznake i informacije povezane s vremenom točne i dosljedne na različitim geografskim lokacijama. Dok radite s vremenskim podacima, važno je uzeti u obzir vremenske zone kako biste spriječili dvosmislenost i netočnosti. Operacije poput usporedbe vremenskih oznaka, izračunavanja trajanja ili zakazivanja događaja bez odgovarajućeg rukovanja vremenskom zonom mogu dati neočekivane rezultate.

Uz Chrono možete mijenjati vremenske zone između njih. Evo primjera pretvaranja a Datum vrijeme iz jedne vremenske zone u drugu:

koristiti chrono::{DatumVrijeme, Utc, Lokalno, Vremenska Zona};

fnpretvoriti vremensku zonu() {
neka utc_time: datumvrijeme = Utc:: sada();
neka lokalno_vrijeme: datumvrijeme = utc_time.with_timezone(&Local);

println!("UTC vrijeme: {}", utc_vrijeme);
println!("Lokalno vrijeme: {}", lokalno vrijeme);
}

The pretvoriti vremensku zonu funkcija dohvaća trenutni UTC s UTC:: sada metoda, pretvara UTC u lokalnu vremensku zonu s s_vremenskom zonom metoda koja se odnosi na Lokalni struct i vraća a Datum vrijeme objekt koji predstavlja istu točku u vremenu, ali u lokalnoj vremenskoj zoni.

Kada nazovete pretvoriti vremensku zonu funkciju, ispisat će UTC i lokalno vrijeme na konzolu.

Osim toga, Chrono nudi prikladne metode i funkcije za ljetno računanje vremena (DST) i pomake vremenske zone. U vašem sustavu možete podesite sat za ljetno računanje vremena putem aplikacije Postavke ili upravljačke ploče.

Evo primjera koji pokazuje mogućnosti Chrona s DST-om i vremenskim pomacima:

koristiti chrono::{DatumVrijeme, Utc, FixedOffset};

fnrukovanje_dst() {
neka utc_time: datumvrijeme = Utc:: sada();
neka ny_timezone = FixedOffset:: east(5 * 3600);
// Istočno ljetno vrijeme (EDT) UTC-4:00

neka ny_time: datumvrijeme = utc_time.with_timezone(&ny_timezone);

println!("UTC vrijeme: {}", utc_vrijeme);
println!("Njujorško vrijeme: {}", ny_vrijeme);
}

The rukovanje_dst funkcija pristupa trenutnom vremenu pomoću sada metodu i dohvaća vrijeme u New Yorku dok uračunava vrijeme pomaka s Fiksni pomak:: istok metoda.

Pozivom na s_vremenskom zonom funkciju, pretvarate UTC u vremensku zonu New Yorka. Chrono obrađuje prilagodbe vremena u skladu s odgovarajućim DST-om i vraća a Datum vrijeme objekt.

Kada radite s DST-om, ključno je zapamtiti da se prijelazi na DST događaju na određene datume i vremena. Chrono's Datum vrijeme struct je opremljen za rukovanje tim prijelazima i osigurava točne prikaze vremena u različitim vremenskim zonama.

Izračuni trajanja i intervala

Trajanje je vrijeme neovisno o bilo kojoj specifičnoj točki u vremenu. Možda ćete morati izračunati trajanje između dva događaja, izmjeriti proteklo vrijeme ili dodati ili oduzeti određeni iznos od određenog vremena.

Rust standardna biblioteka vrijeme sanduk pruža opsežne alate za učinkovito rukovanje trajanjima.

Evo kako možete izmjeriti vrijeme izvršenja funkcije pomoću vrijeme sanduk:

koristiti chrono::{DatumVrijeme, Utc};
koristiti std:: vrijeme:: Instant;

fnglavni() {
neka start = Instant:: now();

// Izvođenje neke operacije
// ...

neka kraj = Trenutak:: sada();
neka trajanje = kraj.trajanje_od (početak);

println!("Proteklo vrijeme: {:?}", trajanje);
}

The glavni funkcija dohvaća trenutno vrijeme s Trenutak metoda ugrađenog vrijeme sanduk. Nakon operacije, glavni funkcija dohvaća vrijeme u tom trenutku i procjenjuje razliku s trajanje_od funkciju prije ispisa vremenske razlike na konzoli.

Serijalizacija i deserijalizacija: Pretvaranje JSON datuma i vremena u Rust Structs pomoću Chrona

Serijalizacija i deserijalizacija vrijednosti datuma i vremena iz JSON-a pomoću programa Chrono i Serde jednostavan je postupak. Prvo dodajte serde i serde_json sanduke za ovisnosti vašeg projekta.

[ovisnosti]
serde = { verzija = "1.0", karakteristike = ["izvesti"] }
serde_json = "1.0"

Zatim ćete morati definirati vrstu Rust-a i implementirati je #[derive (Serialize, Deserialize)] atributi za vrstu gdje ćete navesti vrstu podataka:

koristiti chrono::{DatumVrijeme, Utc};

#[derive (Serialize, Deserialize)]
strukturiratiSastanak {
start_time: datumvrijeme,
kraj_vrijeme: datumvrijeme,
}

Možete serijalizirati Sastanak strukturirajte u JSON sa Serdeom uz Chrono mogućnosti oblikovanja.

Evo kako možete pretvoriti instancu Sastanak upišite u JSON:

koristiti serde_json:: to_string;

fnglavni() {
neka sastanak = sastanak {
start_time: UTC:: now(),
kraj_vrijeme: UTC:: sada(),
};

neka json = to_string(&meeting).unwrap();
println!("{}", json);
}

The glavni funkcija stvara a Sastanak instanca s trenutnim UTC-om za polja prije upotrebe na_string funkcija za pretvaranje instance strukture u JSON niz ispisan na konzoli.

Možete jednostavno deserijalizirati JSON podatke o datumu i vremenu u vrstu strukture pomoću serde_json from_str funkcija koja prima JSON niz i vraća instancu strukture.

koristiti serde_json:: from_str;

fnglavni() {
neka json = r#"{"start_time": "2023-05-28T12:00:00Z", "end_time": "2023-05-28T14:00:00Z"}"#;

neka sastanak: Sastanak = from_str (json).unwrap();
println!("{:#?}", sastanak);
}

The glavni funkcija deserijalizira JSON niz iz json varijabla u sastanak instanca od Sastanak struct prije ispisa instance strukture na konzolu.

S Rustom možete izraditi sofisticirane aplikacije

Robusnost Chrono-a, jednostavnost korištenja i opsežna funkcionalnost čine ga nezamjenjivim alatom za rukovanje datumima, vremenima, trajanjem i intervalima vaših aplikacija. Možete osigurati točne izračune vremena, učinkovito planiranje i pouzdane operacije povezane s datumom iskorištavanjem mogućnosti Chrona.

Jedan od ključnih slučajeva uporabe za Chrono je izrada web aplikacija. Chrono možete koristiti za evidenciju vremena aktivnosti, mjerenje vremena aktivnosti korisnika i druge web operacije.