Osvojte si základné koncepty manipulácie s dátumami a časmi vo vašich projektoch Rust.

Spracovanie dátumu a času je kľúčovým aspektom mnohých aplikácií, od plánovania úloh a analýzy údajov až po vykonávanie výpočtov a zabezpečenie reprezentácie údajov.

Rust má veľa knižníc a modulov na prácu s dátumami a časmi. Hrdza poskytuje vstavaný čas Pre operácie súvisiace s časom a knižnica Chrono spolupracuje s mnohými ďalšími knižnicami Rust pre operácie s dátumom a časom.

Začíname pracovať s dátumom a časom v Rust

Chrono je knižnica dátumu a času na spracovanie dátumov, časov, časových pásiem a trvania v Rust. Chrono poskytuje viacero funkcií a intuitívne rozhranie API pre typy dátumu a času, časové pásma a posun dátumu a času, trvanie a interval, analýzu a formátovanie a prácu s kalendármi.

Chrono sa dobre hrá s ostatnými knižnicami v ekosystéme Rust a bez problémov sa integruje so štandardom I/O vlastnosti knižnice, ktoré vám umožňujú čítať a zapisovať hodnoty dátumu a času Chrono z a do rôznych tokov.

instagram viewer

Okrem toho má Chrono podporu pre serializáciu a deserializáciu prostredníctvom Serde crate, čo uľahčuje prácu s typmi Chrono vo formátoch JSON, YAML a ďalších. Vďaka integrácii Chrono so Serde je vhodný pre operácie s dátumom a časom vytváranie webových aplikácií v Ruste.

Na získanie polohy môžete použiť Chrono UTC (koordinovaný svetový čas) pre mnohé operácie, ako sú konverzie.

Pridajte túto smernicu do závislosti časť vášho Cargo.toml súbor na inštaláciu a používanie chrono prepravka:

[závislosti]
chrono = "0.4.24"

Po inštalácii chrono prepravka, môžete použiť chrono vo svojom projekte Rust importovaním prepravky takto:

použitie chrono:: predohra::*;

Chrono je jednou z prepraviek Rust, ktoré budete potrebovať vo svojom vývojovom arzenáli, pretože poskytuje väčšinu funkcií pre operácie s dátumom a časom.

Časové pásma a spracovanie času v hrdze s Chrono

Časové pásma zabezpečujú, že časové pečiatky a informácie súvisiace s časom sú presné a konzistentné v rôznych geografických oblastiach. Pri práci s údajmi súvisiacimi s časom je nevyhnutné brať do úvahy časové pásma, aby sa predišlo nejednoznačnosti a nepresnostiam. Operácie ako porovnávanie časových pečiatok, výpočet trvania alebo plánovanie udalostí bez správneho spracovania časového pásma môžu priniesť neočakávané výsledky.

Pomocou Chrono môžete prevádzať medzi časovými pásmami. Tu je príklad konverzie a Dátum Čas z jedného časového pásma do druhého:

použitie chrono::{DateTime, Utc, Local, TimeZone};

fnconvert_timezone() {
nech utc_time: DateTime = Utc:: now();
nech local_time: DateTime = utc_time.with_timezone(&Local);

println!("Čas UTC: {}", utc_time);
println!("Miestny čas: {}", miestny čas);
}

The convert_timezone funkcia načíta aktuálny UTC s Utc:: teraz metóda, konvertuje UTC na miestne časové pásmo pomocou with_timezone metóda, ktorá sa odvoláva na Miestne struct a vracia a Dátum Čas objekt predstavujúci rovnaký časový bod, ale v miestnom časovom pásme.

Keď zavoláte na convert_timezone vytlačí UTC a miestny čas do konzoly.

Chrono navyše poskytuje pohodlné metódy a funkcie pre letný čas (DST) a posuny časového pásma. Vo vašom systéme môžete nastavte hodiny na letný čas cez aplikáciu Nastavenia alebo Ovládací panel.

Tu je príklad ukazujúci možnosti Chrono s letným časom a časovými posunmi:

použitie chrono::{DateTime, Utc, FixedOffset};

fnhandle_dst() {
nech utc_time: DateTime = Utc:: now();
nech ny_timezone = Pevný posun:: východ (5 * 3600);
// Východný letný čas (EDT) UTC-4:00

nech ny_time: DateTime = utc_time.with_timezone(&ny_timezone);

println!("Čas UTC: {}", utc_time);
println!("New York Time: {}", NY_time);
}

The handle_dst funkcia pristupuje k aktuálnemu času pomocou teraz metóda a získa čas v New Yorku, pričom započítava čas posunu s Pevný posun:: východ metóda.

Zavolaním na with_timezone konvertujete UTC na časové pásmo New York. Chrono spracuje úpravy času podľa príslušného letného času a vráti a Dátum Čas objekt.

Pri prevádzke s letným časom je dôležité pamätať na to, že prechody letného času sa vyskytujú v konkrétnych dátumoch a časoch. Chrono's Dátum Čas struct je vybavená tak, aby zvládla tieto prechody a zabezpečila presné zobrazenie času v rôznych časových pásmach.

Výpočty trvania a intervalov

Trvanie je čas nezávislý od akéhokoľvek konkrétneho bodu v čase. Možno budete musieť vypočítať trvanie medzi dvoma udalosťami, zmerať uplynutý čas alebo pridať či odpočítať určitú čiastku od určeného času.

Štandardná knižnica Rust čas prepravka poskytuje komplexné nástroje na efektívnu manipuláciu s trvaním.

Tu je návod, ako môžete merať čas vykonania funkcie pomocou čas prepravka:

použitie chrono::{DateTime, Utc};
použitie std:: time:: Instant;

fnHlavná() {
nech start = Instant:: now();

// Vykonajte nejakú operáciu
// ...

nech end = Instant:: now();
nech trvanie = koniec.trvanie_od (začiatok);

println!("Uplynutý čas: {:?}", trvanie);
}

The Hlavná funkcia načíta aktuálny čas pomocou Okamžité spôsob zabudovania čas prepravka. Po operácii, Hlavná funkcia načíta čas v danom okamihu a vyhodnotí rozdiel s trvanie_od pred vytlačením časového rozdielu do konzoly.

Serializácia a deserializácia: Konverzia dátumu a času JSON na hrdzavé štruktúry pomocou Chrono

Serializácia a deserializácia hodnôt dátumu a času z JSON pomocou Chrono a Serde je jednoduchý proces. Najprv pridajte Serde a serde_json prepravky do závislostí vášho projektu.

[závislosti]
Serde = { verzia = "1.0", funkcie = ["odvodiť"] }
serde_json = "1.0"

Ďalej budete musieť definovať typ Rust a implementovať ho #[derive (serialize, deserialize)] atribúty pre typ, kde zadáte typ údajov:

použitie chrono::{DateTime, Utc};

#[derive (serialize, deserialize)]
štrukturovaťStretnutie {
start_time: DateTime,
end_time: DateTime,
}

Môžete serializovať Stretnutie struct na JSON so Serde popri možnostiach formátovania Chrono.

Tu je návod, ako môžete previesť inštanciu súboru Stretnutie zadajte do JSON:

použitie serde_json:: to_string;

fnHlavná() {
nech stretnutie = stretnutie {
start_time: Utc:: now(),
end_time: Utc:: now(),
};

nech json = to_string(&stretnutie).unwrap();
println!("{}", json);
}

The Hlavná funkcia vytvára a Stretnutie inštanciu s aktuálnym UTC pre polia pred použitím natiahnuť na konverziu inštancie štruktúry na reťazec JSON vytlačený na konzole.

Údaje dátumu a času JSON môžete jednoducho deserializovať na typ štruktúry pomocou serde_json od_str funkcia, ktorá preberá reťazec JSON a vracia inštanciu štruktúry.

použitie serde_json:: from_str;

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

nech stretnutie: Meeting = from_str (json).unwrap();
println!("{:#?}", stretnutie);
}

The Hlavná funkcia deserializuje reťazec JSON z json premenná do stretnutie príklad z Stretnutie struct pred tlačou inštancie struct na konzolu.

Môžete vytvárať sofistikované aplikácie s hrdzou

Robustnosť, jednoduchosť používania a rozsiahle funkcie z neho robia nepostrádateľný nástroj na spracovanie dátumov, časov, trvania a intervalov vašich aplikácií. Využitím možností Chrono môžete zabezpečiť presné výpočty času, efektívne plánovanie a spoľahlivé operácie súvisiace s dátumom.

Jedným z kľúčových prípadov použitia Chrono je vytváranie webových aplikácií. Chrono môžete použiť na zaznamenávanie času aktivity, načasovanie aktivity používateľa a ďalšie webové operácie.