Rust Snippets

Rust Unix 타임스탬프 스니펫

현재 Unix 초·밀리초, chrono 기반 포맷, 에포크 값을 읽기 쉬운 UTC 문자열로 변환하는 Rust 예제.

Current Unix timestamp (seconds)
use std::time::{SystemTime, UNIX_EPOCH};

let ts = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_secs();
Current Unix timestamp (milliseconds)
use std::time::{SystemTime, UNIX_EPOCH};

let ms = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_millis();
With the chrono crate
// Cargo.toml: chrono = "0.4"
use chrono::Utc;

Utc::now().timestamp()         // seconds
Utc::now().timestamp_millis()  // milliseconds
Format with chrono
use chrono::{DateTime, TimeZone, Utc};

let dt: DateTime<Utc> = Utc.timestamp_opt(1700000000, 0).unwrap();
println!("{}", dt.to_rfc3339());
println!("{}", dt.format("%Y-%m-%d %H:%M:%S"));

Rust 타임스탬프 기본

표준 라이브러리는 의존성 없는 타임스탬프 계산을 위해 SystemTime과 UNIX_EPOCH를 제공합니다. duration_since(UNIX_EPOCH)는 초·밀리초·마이크로초·나노초로 읽을 수 있습니다.

Rust에서 타임스탬프 형식화

읽기 쉬운 날짜에는 많은 Rust 프로젝트가 chrono 크레이트를 사용합니다. epoch 초를 UTC DateTime으로 변환한 뒤, 로그와 사용자 인터페이스용으로 RFC3339나 사용자 정의 문자열로 형식화하세요.

Rust 운영 참고 사항

Rust 표준 라이브러리는 지속 시간 측정과 Unix 시간 읽기에는 충분하지만, 달력 형식화에는 chrono나 time 같은 크레이트가 더 낫습니다. 외부 타임스탬프는 음수이거나 너무 크거나 잘못된 단위일 수 있으므로, 실패할 수 있는 변환은 입력 처리 가까이에 두세요.

  • SystemTime의 표준 Unix 초에는 as_secs()를 사용
  • JavaScript 호환 타임스탬프에는 as_millis()를 사용
  • 파싱, 시간대 인식 형식화, RFC3339 출력이 필요하면 chrono나 time을 사용
  • 외부 타임스탬프 단위를 타입이 있는 구조체에 저장하기 전에 검증

FAQ

SystemTime은 1970년 이전 날짜를 다룰 수 있나?
SystemTime은 Unix epoch 부근의 시각을 표현할 수 있지만, duration_since(UNIX_EPOCH)는 그보다 이전 순간에 대해 오류를 반환합니다. 외부 타임스탬프가 음수일 수 있으면 그 경우를 처리하세요.
모든 타임스탬프에 chrono가 필요한가?
아니요. 현재 Unix 초·밀리초에는 표준 라이브러리로 충분합니다. 파싱, 형식화, 달력 로직이 필요할 때 chrono나 time을 사용하세요.
Rust 타임스탬프 단위를 검증하려면?
샘플 값을 chrono나 time으로 RFC3339로 변환한 뒤, 그 필드를 초나 밀리초로 받아들이기 전에 API나 데이터베이스 계약과 일치하는지 확인하세요.