パースと表示
日付と時刻を調べる
現在の UTC DateTime を取得し、Timelike を使って時/分/秒を、Datelike を使って年/月/日/曜日を取得します。
use chrono::{Datelike, Timelike, Utc};
fn main() {
let now = Utc::now();
let (is_pm, hour) = now.hour12();
println!(
"The current UTC time is {:02}:{:02}:{:02} {}",
hour,
now.minute(),
now.second(),
if is_pm { "PM" } else { "AM" }
);
println!(
"And there have been {} seconds since midnight",
now.num_seconds_from_midnight()
);
let (is_common_era, year) = now.year_ce();
println!(
"The current UTC date is {}-{:02}-{:02} {:?} ({})",
year,
now.month(),
now.day(),
now.weekday(),
if is_common_era { "CE" } else { "BCE" }
);
println!(
"And the Common Era began {} days ago",
now.num_days_from_ce()
);
}
日付を UNIX タイムスタンプに変換し、その逆変換も行う
NaiveDate::from_ymd と NaiveTime::from_hms で指定した日付を
NaiveDateTime::timestamp を使って UNIX timestamp に変換します。
続いて、1970 年 1 月 1 日 0:00:00 UTC から 10 億秒後の日付が何であったかを
NaiveDateTime::from_timestamp を使って計算します。
use chrono::{NaiveDate, NaiveDateTime};
fn main() {
let date_time: NaiveDateTime = NaiveDate::from_ymd(2017, 11, 12).and_hms(17, 33, 44);
println!(
"Number of seconds between 1970-01-01 00:00:00 and {} is {}.",
date_time, date_time.timestamp());
let date_time_after_a_billion_seconds = NaiveDateTime::from_timestamp(1_000_000_000, 0);
println!(
"Date after a billion seconds since 1970-01-01 00:00:00 was {}.",
date_time_after_a_billion_seconds);
}
書式設定された日付と時刻を表示
Utc::now を使用して UTC の現在時刻を取得して表示します。現在時刻を、DateTime::to_rfc2822 を使用したよく知られた形式の RFC 2822、DateTime::to_rfc3339 を使用した RFC 3339、および DateTime::format を使用したカスタム形式で書式設定します。
use chrono::{DateTime, Utc};
fn main() {
let now: DateTime<Utc> = Utc::now();
println!("UTC now is: {}", now);
println!("UTC now in RFC 2822 is: {}", now.to_rfc2822());
println!("UTC now in RFC 3339 is: {}", now.to_rfc3339());
println!("UTC now in a custom format is: {}", now.format("%a %b %e %T %Y"));
}
文字列を DateTime 構造体にパースする
よく知られた形式である RFC 2822、RFC 3339、およびカスタム形式を表す文字列から、それぞれ
DateTime::parse_from_rfc2822、DateTime::parse_from_rfc3339、および
DateTime::parse_from_str を使用して DateTime 構造体をパースします。
DateTime::parse_from_str で利用できるエスケープシーケンスは
chrono::format::strftime にあります。なお、DateTime::parse_from_str では、
日付と時刻を一意に特定できる DateTime 構造体を生成できる必要があります。
タイムゾーンなしの日付と時刻をパースするには
NaiveDate、NaiveTime、および NaiveDateTime を使用してください。
use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime};
use chrono::format::ParseError;
fn main() -> Result<(), ParseError> {
let rfc2822 = DateTime::parse_from_rfc2822("Tue, 1 Jul 2003 10:52:37 +0200")?;
println!("{}", rfc2822);
let rfc3339 = DateTime::parse_from_rfc3339("1996-12-19T16:39:57-08:00")?;
println!("{}", rfc3339);
let custom = DateTime::parse_from_str("5.8.1994 8:00 am +0000", "%d.%m.%Y %H:%M %P %z")?;
println!("{}", custom);
let time_only = NaiveTime::parse_from_str("23:56:04", "%H:%M:%S")?;
println!("{}", time_only);
let date_only = NaiveDate::parse_from_str("2015-09-05", "%Y-%m-%d")?;
println!("{}", date_only);
let no_timezone = NaiveDateTime::parse_from_str("2015-09-05 23:56:04", "%Y-%m-%d %H:%M:%S")?;
println!("{}", no_timezone);
Ok(())
}