- première page
- Liste de blogs
- Article détaillé
Convert Dates and Times with Rust Date Tool
P
PixelPioneer 数字先驱
time convert
date tool
2025-09-17

Articles récents
partager:
Rust DateTime Handling with Chrono

Basic DateTime Operations
Rust's chrono crate provides robust datetime handling. Here are essential operations:
use chrono::{DateTime, Local, NaiveDateTime, Utc};
// Get current timestamp
let now = Utc::now();
println!("Current UTC: {}", now);
// Parse date string
let dt = NaiveDateTime::parse_from_str("2023-01-15 14:30:00", "%Y-%m-%d %H:%M:%S")?;
println!("Parsed datetime: {}", dt);
// Convert to timestamp
let timestamp = dt.timestamp();
println!("Unix timestamp: {}", timestamp);
Timezone Conversions
Handle timezone-aware datetimes and daylight saving time:
use chrono_tz::America::New_York;
// Convert UTC to local time
let utc_time = DateTime::<Utc>::from_utc(dt, Utc);
let local_time = utc_time.with_timezone(&Local);
println!("Local time: {}", local_time);
// Convert between timezones
let ny_time = utc_time.with_timezone(&New_York);
println!("New York time: {}", ny_time);
Formatting and Parsing
Custom date formats and ISO 8601 handling:
// Custom format parsing
let custom_date = NaiveDateTime::parse_from_str("15-Jan-2023 2:30PM", "%d-%b-%Y %I:%M%p")?;
// ISO 8601 parsing
let iso_date = DateTime::parse_from_rfc3339("2023-01-15T14:30:00-05:00")?;
// Formatting
println!("Formatted: {}", now.format("%Y/%m/%d %H:%M:%S"));
Date Arithmetic
Perform calculations with dates:
use chrono::Duration;
// Add days to date
let new_date = now.checked_add_signed(Duration::days(7)).unwrap();
// Calculate difference
let diff = new_date.signed_duration_since(now);
println!("Difference: {} days", diff.num_days());
// Compare dates
if new_date > now {
println!("Future date");
}
Best Practices
- Always use
DateTime<Utc>for storage - Convert to local time only for display
- Handle DST transitions with
chrono-tz - Use
checked_methods for arithmetic to avoid panics - Prefer RFC 3339 (ISO 8601) for serialization
// Safe arithmetic
match now.checked_add_signed(Duration::days(365)) {
Some(future) => println!("Next year: {}", future),
None => println!("Date overflow"),
}
For production systems, consider the newer time crate for improved performance and API design, especially if you don't need full timezone database support.



