Beheers de essentiële concepten voor het manipuleren van datums en tijden in uw Rust-projecten.
Het omgaan met datum en tijd is een cruciaal aspect van veel toepassingen, van het plannen van taken en het analyseren van gegevens tot het uitvoeren van berekeningen en het waarborgen van gegevensrepresentatie.
Rust heeft veel bibliotheken en modules om met datums en tijden te werken. Roest zorgt voor een ingebouwde tijd krat voor tijdgerelateerde bewerkingen, en de Chrono-bibliotheek werkt samen met vele andere Rust-bibliotheken voor datum- en tijdbewerkingen.
Aan de slag Werken met datum en tijd in Rust
Chrono is een datum-tijdbibliotheek voor het verwerken van datums, tijden, tijdzones en tijdsduren in Rust. Chrono biedt meerdere functies en een intuïtieve API voor datum- en tijdtypes, tijdzones en offset datum-tijd, duur en interval, parseren en formatteren, en werken met kalenders.
Chrono speelt goed samen met andere bibliotheken in het Rust-ecosysteem en integreert naadloos met de standaard I/O-kenmerken van de bibliotheek waarmee u chrono-datum- en tijdwaarden van en naar verschillende kunt lezen en schrijven stromen.
Bovendien heeft Chrono ondersteuning voor serialisatie en deserialisatie via de Serde krat, waardoor het gemakkelijk is om met Chrono-types in JSON, YAML en andere formaten te werken. De integratie van Chrono met Serde maakt het geschikt voor datum-tijdoperaties while webapplicaties bouwen in Rust.
U kunt Chrono gebruiken om uw locatie op te halen UTC (gecoördineerde universele tijd) voor tal van bewerkingen zoals conversies.
Voeg deze richtlijn toe aan de afhankelijkheden gedeelte van uw Cargo.toml bestand om het chronograaf krat:
[afhankelijkheden]
chronograaf = "0.4.24"
Na het installeren van de chronograaf krat, je kunt gebruiken chronograaf in je Rust-project door de kist als volgt te importeren:
gebruik chrono:: prelude::*;
Chrono is een van de Rust-kratten die je nodig hebt in je ontwikkelingsarsenaal, omdat het de meeste functies biedt voor datum- en tijdbewerkingen.
Tijdzones en tijdafhandeling in roest met chrono
Tijdzones zorgen ervoor dat tijdstempels en tijdgerelateerde informatie nauwkeurig en consistent zijn op verschillende geografische locaties. Bij het werken met tijdgerelateerde gegevens is het essentieel om rekening te houden met tijdzones om onduidelijkheden en onnauwkeurigheden te voorkomen. Bewerkingen zoals het vergelijken van tijdstempels, het berekenen van de duur of het plannen van gebeurtenissen zonder de juiste verwerking van tijdzones kunnen onverwachte resultaten opleveren.
U kunt tussen tijdzones converteren met Chrono. Hier is een voorbeeld van het omzetten van een Datum Tijd van de ene tijdzone naar de andere:
gebruik chrono::{DateTime, Utc, Local, TimeZone};
fnconverteer_tijdzone() {
laten utc_time: datum/tijd= Utc:: nu();
laten local_time: DatumTijd= utc_time.with_timezone(&Lokaal);
println!("UTC-tijd: {}", utc_tijd);
println!("Lokale tijd: {}", lokale tijd);
}
De converteer_tijdzone functie haalt de huidige UTC op met de Utc:: nu methode, converteert de UTC naar de lokale tijdzone met de met_tijdzone methode die verwijst naar de Lokaal struct en retourneert a Datum Tijd object dat hetzelfde tijdstip vertegenwoordigt, maar in de lokale tijdzone.
Wanneer u belt met de converteer_tijdzone functie, zal het de UTC en lokale tijd naar de console afdrukken.
Bovendien biedt Chrono handige methoden en functionaliteiten voor zomertijd (DST) en tijdzone-offsets. In uw systeem kan dat pas de klok aan voor zomertijd via de app Instellingen of het configuratiescherm.
Hier is een voorbeeld van de mogelijkheden van Chrono met DST en tijdverschuivingen:
gebruik chrono::{DateTime, Utc, FixedOffset};
fnhandle_dst() {
laten utc_time: datum/tijd= Utc:: nu();
laten ny_timezone = FixedOffset:: oost(5 * 3600);
// Eastern-zomertijd (EDT) UTC-4:00laten ny_time: DatumTijd
= utc_tijd.met_tijdzone(&ny_tijdzone);
println!("UTC-tijd: {}", utc_tijd);
println!("New York tijd: {}", New York tijd);
}
De handle_dst functie heeft toegang tot de huidige tijd met de nu methode en haalt de tijd in New York op terwijl rekening wordt gehouden met de offsettijd met de FixedOffset:: oost methode.
Door te bellen naar de met_tijdzone functie converteert u de UTC naar de tijdzone van New York. Chrono handelt de tijdaanpassingen af volgens de juiste zomertijd en retourneert een Datum Tijd voorwerp.
Wanneer u met DST werkt, is het van cruciaal belang om te onthouden dat DST-overgangen op specifieke datums en tijden plaatsvinden. Chrono's Datum Tijd struct is uitgerust om deze overgangen aan te kunnen en nauwkeurige weergaven van tijd in verschillende tijdzones te garanderen.
Duur- en intervalberekeningen
Een duur is een tijd die onafhankelijk is van een bepaald tijdstip. Mogelijk moet u de duur tussen twee gebeurtenissen berekenen, de verstreken tijd meten of een bepaald bedrag optellen bij of aftrekken van een bepaalde tijd.
De standaardbibliotheek van Rust tijd krat biedt uitgebreide tools voor het efficiënt hanteren van tijdsduren.
Hier leest u hoe u de uitvoeringstijd van een functie kunt meten met de tijd krat:
gebruik chrono::{DateTime, Utc};
gebruik std:: tijd:: Direct;fnvoornaamst() {
laten start = Direct:: nu();// Voer een bewerking uit
// ...laten einde = Direct:: nu();
laten duur = einde.duur_sinds (begin);
println!("Verstreken tijd: {:?}", duur);
}
De voornaamst functie haalt de huidige tijd op met de Onmiddellijk methode van de ingebouwde tijd krat. Na de operatie, de voornaamst functie haalt de tijd op dat moment op en evalueert het verschil met de duur_sinds voordat u het tijdsverschil naar de console afdrukt.
Serialiseren en deserialiseren: JSON-datum en -tijd converteren naar roeststructuren met behulp van chrono
Het serialiseren en deserialiseren van datum- en tijdwaarden van JSON met behulp van Chrono en Serde is een eenvoudig proces. Voeg eerst de serde En serde_json kratten aan de afhankelijkheden van uw project.
[afhankelijkheden]
serde = { versie = "1.0", kenmerken = ["afleiden"] }
serde_json = "1.0"
Vervolgens moet u het Rust-type definiëren en het implementeren #[afleiden (serialiseren, deserialiseren)] attributen voor het type waar u het gegevenstype specificeert:
gebruik chrono::{DateTime, Utc};
#[afleiden (serialiseren, deserialiseren)]
structuurOntmoeting {
start_time: DatumTijd,
eind_tijd: DatumTijd,
}
U kunt de Ontmoeting struct naar JSON met Serde naast de opmaakmogelijkheden van Chrono.
Hier leest u hoe u een instantie van de Ontmoeting typ naar JSON:
gebruik serde_json:: to_string;
fnvoornaamst() {
laten vergadering = vergadering {
start_time: Utc:: nu(),
eind_tijd: Utc:: nu(),
};
laten json = to_string(&vergadering).uitpakken();
println!("{}", json);
}
De voornaamst functie creëert een Ontmoeting bijvoorbeeld met de huidige UTC voor de velden voordat u de naar_tekenreeks functie om de struct-instantie te converteren naar een JSON-tekenreeks die naar de console is afgedrukt.
U kunt JSON-datum-tijdgegevens eenvoudig deserialiseren naar een struct-type met serde_json's van_str functie die een JSON-tekenreeks opneemt en een struct-instantie retourneert.
gebruik serde_json:: from_str;
fnvoornaamst() {
laten json = r#"{"start_time": "2023-05-28T12:00:00Z", "end_time": "2023-05-28T14:00:00Z"}"#;
laten vergadering: vergadering = from_str (json).unwrap();
println!("{:#?}", ontmoeting);
}
De voornaamst functie deserialiseert de JSON-tekenreeks van de json variabele in de ontmoeting exemplaar van de Ontmoeting struct voordat u de struct-instantie naar de console afdrukt.
U kunt geavanceerde applicaties bouwen met Rust
De robuustheid, het gebruiksgemak en de uitgebreide functionaliteit van Chrono maken het tot een onmisbaar hulpmiddel voor het verwerken van de datums, tijden, duur en intervallen van uw apps. U kunt zorgen voor nauwkeurige tijdberekeningen, efficiënte planning en betrouwbare datumgerelateerde operaties door gebruik te maken van de mogelijkheden van Chrono.
Een belangrijke use-case voor Chrono is het bouwen van webapplicaties. U kunt Chrono gebruiken voor tijdregistraties van activiteiten, het timen van gebruikersactiviteit en andere webbewerkingen.