날짜와 시간 조작은 작업 스케줄링, 데이터 분석, 계산, 데이터 표시 등 수많은 소프트웨어 프로그램에서 없어서는 안 될 중요한 역할을 합니다.

프로그래밍 언어 Rust는 날짜와 시간 처리와 관련하여 효율적인 기능을 제공하는 다양한 라이브러리와 모듈을 자랑합니다. 이 언어에는 다양한 시간 관련 작업을 처리할 수 있도록 설계된 자체 내장 “시간” 상자가 포함되어 있습니다. 또한 “크로노” 라이브러리는 다른 여러 유명 Rust 라이브러리와 원활하게 통합되므로 사용자는 다양한 날짜 및 시간 작업을 쉽게 수행할 수 있습니다.

Rust에서 날짜 및 시간 작업 시작하기

크로노 라이브러리는 프로그래밍 언어 Rust 내에서 날짜 및 시간 변수, 시간대, 간격 및 기간을 관리할 수 있는 효율적인 솔루션입니다. 이 라이브러리는 포괄적인 기능 세트를 자랑하며 구문 분석 및 서식 지정, 시간대 인식 및 캘린더 작업과 같은 다양한 날짜 및 시간 관련 개념을 조작하기 위한 사용하기 쉬운 인터페이스를 제공합니다.

크로노는 Rust 에코스피어 내의 다른 라이브러리와 쉽게 상호 운용할 수 있으므로 표준 라이브러리의 입출력 특성과 원활하게 통합되어 크로노 날짜 및 시간 값을 여러 스트림에 읽고 쓸 수 있습니다.

Chrono는 Serde 크레이트와의 통합을 통해 JSON, YAML 등 다양한 형식의 데이터를 직렬화 및 역직렬화할 수 있는 강력한 기능을 자랑합니다. 이 기능은 날짜 시간 연산을 정확하게 처리해야 하는 Rust에서 웹 애플리케이션을 개발할 때 특히 유용합니다.

Chrono를 활용하여 위치의 UTC(협정 세계시)를 검색하면 변환을 비롯한 다양한 용도로 유용하게 사용할 수 있습니다.

‘chrono’ 패키지의 설치 및 활용을 용이하게 하기 위해 ‘Cargo.toml’ 파일의 ‘의존성’ 세그먼트에 앞서 언급한 명령어를 추가해 주십시오.

 [dependencies]
chrono = "0.4.24"

“chrono” 크레이트가 설치되면 다음과 같이 해당 크레이트를 임포트하는 방법으로 Rust 프로젝트에 통합할 수 있습니다:

 use chrono::prelude::*;

크로노 크레이트는 날짜 및 시간과 관련된 포괄적인 기능을 제공하므로 개발자에게 필수적인 툴킷입니다.

녹슬지 않는 크로노의 시간대 및 시간 처리

시간대를 활용하면 다양한 지역에서 타임스탬프 및 시간 정보가 정확성과 통일성을 유지할 수 있습니다. 시간 기반 데이터 조작이 널리 퍼져 있는 상황에서 혼동과 불일치를 피하기 위해 시간대를 고려하는 것은 필수적입니다.그렇지 않을 경우 계산 오류, 잘못된 이벤트 스케줄링 또는 기타 의도하지 않은 결과가 발생할 수 있습니다.

이 글도 확인해 보세요:  슬랙에서 나만의 사용자 지정 슬래시 명령 만들기

크로노를 활용하면 시간대를 변환할 수 있습니다. 다음과 같이 DateTime 객체를 한 시간대에서 다른 시간대로 변환하는 시나리오를 고려해 보겠습니다:

 use chrono::{DateTime, Utc, Local, TimeZone};

fn convert_timezone() {
    let utc_time: DateTime<Utc> = Utc::now();
    let local_time: DateTime<Local> = utc_time.with_timezone(&Local);

    println!("UTC time: {}", utc_time);
    println!("Local time: {}", local_time);
}

`convert_timezone` 함수는 `Utc::now` 메서드를 사용하여 현재의 협정 세계시(UTC)를 구한 다음 `Local` 구조와 연결된 `with_timezone` 기능을 사용하여 이 UTC 타임스탬프를 사용자가 선호하는 로캘의 시간 환경으로 변환하여 사용자 시간대 내에서 동일한 순간을 나타내는 `DateTime` 인스턴스를 생성합니다.

convert\_timezone 함수를 호출하면 콘솔에 협정 세계시(UTC)와 현지 시간을 모두 표시합니다.

크로노는 일광 절약 시간제(DST) 및 시간대 오프셋 구성을 처리하기 위한 완벽한 솔루션을 제공합니다. 사용자는 설정 애플리케이션 또는 제어판을 통해 DST에 대한 시스템 시계 설정을 쉽게 수정할 수 있습니다.

서머타임(일광 절약 시간제) 및 시간대 오프셋 조정에 대한 크로노의 숙련도를 보여드리기 위해 일러스트가 제공되었습니다.

 use chrono::{DateTime, Utc, FixedOffset};

fn handle_dst() {
    let utc_time: DateTime<Utc> = Utc::now();
    let ny_timezone = FixedOffset::east(5 * 3600);
    // Eastern Daylight Time (EDT) UTC-4:00

    let ny_time: DateTime<FixedOffset> = utc_time.with_timezone(&ny_timezone);

    println!("UTC time: {}", utc_time);
    println!("New York time: {}", ny_time);
}

`handle_dst` 함수는 `now()` 메서드를 사용하여 현재 시간을 취득하는 동시에 `FixedOffset::east` 방식을 사용하여 오프셋 시간도 고려합니다.

`with_timezone` 함수를 사용하면 협정 세계시(UTC)와 뉴욕 시간대를 효과적으로 동기화할 수 있습니다. 그런 다음 라이브러리 Chrono는 각 일광 절약 시간제(DST) 규정에 따라 필요한 시간 재조정을 관리하고 그 결과로서 `DateTime` 객체를 반환합니다.

DST로 작업할 때는 특정 날짜와 시간 내에서 지정된 간격으로 DST 전환이 이루어진다는 점을 염두에 두어야 합니다. 크로노 라이브러리 내의 DateTime 구조체는 이러한 변화를 수용하고 다양한 시간대에 걸쳐 정확한 시간 묘사를 유지하도록 설계되었습니다.

기간 및 간격 계산

기간은 특정 시점에 의존하지 않는 개념으로, 여러 이벤트 사이의 간격을 측정하거나 경과 시간을 결정하거나 기존 시간에서 규정된 기간을 더하거나 빼는 등의 용도로 활용할 수 있습니다.

이 글도 확인해 보세요:  자바스크립트에서 Intl API를 사용하는 방법

Rust 표준 라이브러리의 시간 상자는 기간을 효과적으로 관리할 수 있는 강력한 도구 세트를 제공합니다.

다음 프로토콜을 구현하여 “시간” 상자를 사용하여 함수의 성능 지속 시간을 정량화할 수 있습니다:

 use chrono::{DateTime, Utc};
use std::time::Instant;

fn main() {
    let start = Instant::now();

    // Perform some operation
    // ...

    let end = Instant::now();
    let duration = end.duration_since(start);

    println!("Elapsed time: {:?}", duration);
}

이 프로그램의 주요 목적은 시간 상자 패키지에서 인스턴트 메서드를 활용하여 현재 타임스탬프를 얻는 것입니다. 그런 다음 프로그램은 duration\_since 함수를 사용하여 특정 순간 이후 경과된 시간을 계산한 다음 콘솔에 결과를 출력합니다.

직렬화 및 역직렬화: Chrono를 사용하여 JSON 날짜 및 시간을 Rust 구조체로 변환하기

문자열 형태의 날짜 시간을 한 형식에서 다른 형식, 특히 ISO 8601에서 사용자 정의 문자열 형식으로 변환하는 작업은 Chrono 및 Serde 라이브러리를 사용하여 최소한의 노력만 필요합니다. 이 작업을 수행하려면 프로젝트의 종속성 목록에 serde 및 serde\_json을 추가하여 필요한 종속성이 있는지 확인하십시오.

 [dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

`#[파생(직렬화, 역직렬화)]` 특성의 구현과 함께 Rust 유형을 설정하기 위해서는 데이터 유형을 지정해야 합니다.

 use chrono::{DateTime, Utc};

#[derive(Serialize, Deserialize)]
struct Meeting {
    start_time: DateTime<Utc>,
    end_time: DateTime<Utc>,
}

`Meeting` 구조는 `Serde`와 `Chrono`의 서비스를 모두 활용하여 직렬화 및 날짜/시간 서식 지정에 대한 각각의 기능을 활용하여 JSON 형식으로 변환할 수 있습니다.

표본을 변형하는 가장 우아한 방법이 무엇인지 궁금할 수 있습니다.

 use serde_json::to_string;

fn main() {
    let meeting = Meeting {
        start_time: Utc::now(),
        end_time: Utc::now(),
    };

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

주어진 코드의 주요 목적은 “Meeting” 클래스의 인스턴스를 생성하고, 그 구성 속성에 현재 협정 세계시(UTC)를 사용한 다음 “to\_string” 함수를 사용하여 해당 구조체를 JavaScript 객체로 변환하고 시스템 콘솔에 출력하는 것입니다.

serde\_json 라이브러리를 사용하여 JSON 날짜/시간 값을 구조화된 형식으로 변환하기 위해 해당 라이브러리에서 제공하는 `from_str` 함수를 활용할 수 있습니다. 이 함수는 JSON 문자열을 입력으로 받아 구조체 타입의 인스턴스를 생성할 수 있습니다.

 use serde_json::from_str;

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

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

이 코드의 주요 목적은 ‘json’ 변수에 저장된 JSON 문자열을 ‘Meeting’ 구조체의 객체로 변환한 다음 콘솔에 이 객체를 표시하는 것입니다.

이 글도 확인해 보세요:  성능 최적화를 위한 자바스크립트 팁과 요령 10가지

Rust로 정교한 애플리케이션을 구축할 수 있습니다

크로노를 활용하면 애플리케이션 내에서 타임스탬프를 쉽게 관리할 수 있다는 점에서 많은 이점을 제공합니다. 이 유틸리티는 사용자가 정확한 시간 계산, 간소화 된 일정 및 신뢰할 수있는 날짜 관련 프로세스를 수행 할 수있는 인상적인 탄력성, 사용자 친화성 및 포괄적 인 기능을 자랑합니다.크로노의 기능을 워크플로우에 통합하면 시간 데이터를 처리할 때 생산성과 정확성을 최적화할 수 있습니다.

크로노는 웹 애플리케이션 개발에서 유용한 도구로 활용될 수 있습니다. 다양한 기능을 통해 사용자 활동 추적, 세션 시간 기록 및 기타 다양한 웹 기반 작업을 수행할 수 있습니다.

By 김민수

안드로이드, 서버 개발을 시작으로 여러 분야를 넘나들고 있는 풀스택(Full-stack) 개발자입니다. 오픈소스 기술과 혁신에 큰 관심을 가지고 있고, 보다 많은 사람이 기술을 통해 꿈꾸던 일을 실현하도록 돕기를 희망하고 있습니다.