Овладейте основните концепции за манипулиране на дати и часове във вашите проекти на Rust.

Боравенето с дата и час е решаващ аспект на много приложения, от планиране на задачи и анализиране на данни до извършване на изчисления и осигуряване на представяне на данни.

Rust има много библиотеки и модули за работа с дати и часове. Rust осигурява вграден време каса за операции, свързани с времето, а библиотеката Chrono си взаимодейства с много други библиотеки на Rust за операции с дата и час.

Първи стъпки в работата с дата и час в Rust

Chrono е библиотека за дата-час за обработка на дати, часове, часови зони и продължителности в Rust. Chrono предоставя множество функции и интуитивен API за типове дата и час, часови зони и отместване на дата-час, продължителност и интервал, анализиране и форматиране и работа с календари.

Chrono работи добре с други библиотеки в екосистемата Rust и се интегрира безпроблемно със стандарта входно/изходните характеристики на библиотеката, които ви позволяват да четете и записвате стойности за дата и час на Chrono от и към различни потоци.

instagram viewer

Освен това Chrono има поддръжка за сериализация и десериализация чрез Серде crate, което улеснява работата с типове Chrono в JSON, YAML и други формати. Интеграцията на Chrono със Serde го прави подходящ за операции с дата-час изграждане на уеб приложения в Rust.

Можете да използвате Chrono, за да извлечете местоположението си UTC (координирано универсално време) за множество операции като преобразувания.

Добавете тази директива към зависимости раздел от вашия Cargo.toml файл за инсталиране и използване на хроно щайга:

[зависимости]
хроно = "0.4.24"

След инсталиране на хроно щайга, можете да използвате хроно във вашия проект Rust, като импортирате щайгата по следния начин:

използване хроно:: прелюдия::*;

Chrono е един от касите Rust, от които ще се нуждаете във вашия арсенал за разработка, тъй като предоставя повечето функции за операции с дата и час.

Часови зони и обработка на времето в Rust с Chrono

Часовите зони гарантират, че времевите марки и свързаната с времето информация са точни и последователни в различни географски местоположения. Докато работите с данни, свързани с времето, е важно да вземете предвид часовите зони, за да предотвратите двусмислие и неточности. Операции като сравняване на времеви клейма, изчисляване на времетраене или планиране на събития без подходяща обработка на часовата зона могат да доведат до неочаквани резултати.

Можете да конвертирате между часови зони с Chrono. Ето пример за преобразуване на a Време за среща от една часова зона в друга:

използване chrono::{DateTime, Utc, Local, TimeZone};

fnconvert_timezone() {
позволявам utc_time: Дата и час = Utc:: сега ();
позволявам местно_време: дата и час = utc_time.with_timezone(&Local);

println!(„UTC време: {}“, utc_време);
println!("Местно време: {}", местно време);
}

The convert_timezone функцията извлича текущия UTC с UTC:: сега метод, преобразува UTC в местната часова зона с с_времева зона метод, който се отнася до Местен struct и връща a Време за среща обект, представляващ същата точка във времето, но в местната часова зона.

Когато се обадите на convert_timezone функция, тя ще отпечата UTC и местното време на конзолата.

Освен това Chrono предоставя удобни методи и функционалности за лятно часово време (DST) и отмествания на часовата зона. Във вашата система можете настройте часовника за лятно часово време чрез приложението Настройки или контролния панел.

Ето пример, показващ възможностите на Chrono с DST и времеви отмествания:

използване chrono::{DateTime, Utc, FixedOffset};

fnhandle_dst() {
позволявам utc_time: Дата и час = Utc:: сега ();
позволявам ny_timezone = FixedOffset:: изток(5 * 3600);
// Източно лятно часово време (EDT) UTC-4:00

позволявам ny_time: Дата и час = utc_time.with_timezone(&ny_timezone);

println!(„UTC време: {}“, utc_време);
println!(„Ню Йорк време: {}“, ny_time);
}

The handle_dst функцията има достъп до текущото време с сега метод и извлича времето в Ню Йорк, като отчита времето на отместване с FixedOffset:: изток метод.

Като се обадите на с_времева зона функция, вие конвертирате UTC в часовата зона на Ню Йорк. Chrono обработва корекциите на времето според подходящото DST и връща a Време за среща обект.

Когато работите с лятно часово време, е изключително важно да запомните, че преходите към лятното часово време се извършват на определени дати и часове. на Хроно Време за среща struct е оборудван да се справи с тези преходи и да осигури точно представяне на времето в различни часови зони.

Изчисления на продължителност и интервал

Продължителността е време, независимо от всяка конкретна точка във времето. Може да се наложи да изчислите продължителността между две събития, да измерите изминалото време или да добавите или извадите определена сума от определено време.

Стандартната библиотека на Rust време щайгата предоставя изчерпателни инструменти за ефективно боравене с продължителности.

Ето как можете да измерите времето за изпълнение на функция с време щайга:

използване chrono::{DateTime, Utc};
използване std:: time:: Instant;

fnосновен() {
позволявам start = Instant:: now();

// Извършване на някаква операция
// ...

позволявам край = Мигновено:: сега();
позволявам продължителност = end.duration_since (начало);

println!("Изминалото време: {:?}", продължителност);
}

The основен функцията извлича текущия час с Моментално метод на вградения време щайга. След операцията, основен функцията извлича времето в този момент и оценява разликата с продължителност_от функция, преди да отпечата часовата разлика на конзолата.

Сериализиране и десериализиране: Преобразуване на JSON дата и час в Rust Structs с помощта на Chrono

Сериализиране и десериализиране на стойности за дата и час от JSON с помощта на Chrono и Serde е лесен процес. Първо добавете сърде и serde_json каси към зависимостите на вашия проект.

[зависимости]
сърде = { версия = "1.0", функции = ["извличам"] }
serde_json = "1.0"

След това ще трябва да дефинирате типа Rust и да приложите #[производство (сериализиране, десериализиране)] атрибути за типа, където ще посочите типа данни:

използване chrono::{DateTime, Utc};

#[производство (сериализиране, десериализиране)]
структураСреща {
начален_час: Дата и час,
край_час: дата и час,
}

Можете да сериализирате Среща структурирайте в JSON със Serde заедно с възможностите за форматиране на Chrono.

Ето как можете да конвертирате екземпляр на Среща въведете в JSON:

използване serde_json:: към_низ;

fnосновен() {
позволявам среща = Среща {
начален_час: UTC:: сега (),
крайно време: UTC:: сега (),
};

позволявам json = to_string(&meeting).unwrap();
println!("{}", json);
}

The основен функция създава a Среща екземпляр с текущия UTC за полетата, преди да използвате към_низ функция за преобразуване на екземпляра на struct в JSON низ, отпечатан на конзолата.

Можете лесно да десериализирате JSON данни за дата-час в тип структура с serde_json от_ул функция, която приема JSON низ и връща екземпляр на структура.

използване serde_json:: from_str;

fnосновен() {
позволявам json = r#"{"start_time": "2023-05-28T12:00:00Z", "end_time": "2023-05-28T14:00:00Z"}"#;

позволявам среща: Среща = from_str (json).unwrap();
println!("{:#?}", среща);
}

The основен функцията десериализира JSON низа от json променлива в среща екземпляр на Среща struct преди да отпечатате екземпляра на struct в конзолата.

Можете да създавате сложни приложения с Rust

Здравината, лекотата на използване и широката функционалност на Chrono го правят незаменим инструмент за обработка на датите, часовете, продължителността и интервалите на вашите приложения. Можете да осигурите точни изчисления на времето, ефективно планиране и надеждни операции, свързани с дати, като използвате възможностите на Chrono.

Един ключов случай на използване на Chrono е изграждането на уеб приложения. Можете да използвате Chrono за записи на времето за активност, измерване на активността на потребителите и други уеб операции.