Освоение манипулирования датами в Rust: как получить вчерашнюю дату с помощью Chrono

Привет, дружище, Ржавообразный! Сегодня мы собираемся погрузиться в мир манипулирования датами с помощью фантастической библиотеки Chrono в Rust. Если вы когда-нибудь задавались вопросом, как узнать вчерашнюю дату в Rust, вы попали по адресу. Итак, возьмите свой любимый напиток, запустите компилятор Rust и приступим!

Метод 1: вычитание продолжительности
Один из способов получить вчерашнюю дату — вычесть продолжительность одного дня из текущей даты. Вот как это можно сделать:

use chrono::{Local, Duration};
fn get_yesterday() -> chrono::Date<Local> {
    let today = Local::today();
    let one_day = Duration::days(1);
    today - one_day
}
fn main() {
    let yesterday = get_yesterday();
    println!("Yesterday's date: {}", yesterday);
}

В этом примере мы используем функцию Local::today()из Chrono, чтобы получить текущую дату. Затем мы создаем объект Duration, представляющий один день, и вычитаем его из текущей даты, получая вчерашнюю дату.

Метод 2: использование NaiveDateTime
Другой подход предполагает использование структуры NaiveDateTime, предоставленной Chrono. Вот пример:

use chrono::{Local, Duration, NaiveDateTime};
fn get_yesterday() -> chrono::NaiveDate {
    let today = Local::today().naive_local();
    let one_day = Duration::days(1);
    let yesterday = today - one_day;
    NaiveDateTime::from_timestamp(yesterday.timestamp(), 0).date()
}
fn main() {
    let yesterday = get_yesterday();
    println!("Yesterday's date: {}", yesterday);
}

В этом методе мы конвертируем текущую дату (Local::today().naive_local()) в объект NaiveDateTime. Затем мы вычитаем из него один день и преобразуем его обратно в объект NaiveDate, используя NaiveDateTime::from_timestamp().

Метод 3: использование UTC
Если вы предпочитаете работать с датами в формате UTC, вместо этого вы можете использовать функцию Utc::today(). Вот пример:

use chrono::{Utc, Duration};
fn get_yesterday() -> chrono::Date<Utc> {
    let today = Utc::today();
    let one_day = Duration::days(1);
    today - one_day
}
fn main() {
    let yesterday = get_yesterday();
    println!("Yesterday's date (UTC): {}", yesterday);
}

Этот метод очень похож на метод 1, но для получения текущей даты в формате UTC мы используем Utc::today()вместо Local::today().