時間(span)を表す。
成果物
生成: new()
fn main() { let du = std::time::Duration::new(1, 0); println!("{:?}", du); }
$ cargo run ... 1s
秒数・ナノ秒の取得: as_secs()
, subsec_nanos()
fn main() { let du = std::time::Duration::new(1, 0); println!("{:?}", du); println!("{:?}", du.as_secs()); println!("{:?}", du.subsec_nanos()); }
$ cargo run ... 1s 1 0
他にもas_millis()
, as_micros()
, as_nanos()
, subsec_millis()
, subsec_micros()
があるが同じことなので省略。
数値→Duration: from_secs()
fn main() { let du = std::time::Duration::from_secs(1); println!("{:?}", du); println!("{:?}", du.as_secs()); println!("{:?}", du.subsec_nanos()); }
$ cargo run ... 1s 1 0
ナノ秒単位なら以下。
fn main() { let du = std::time::Duration::from_nanos(12345678901); println!("{:?}", du); println!("{:?}", du.as_secs()); println!("{:?}", du.subsec_nanos()); }
$ cargo run ... 12.345678901s 12 345678901
他にもfrom_millis()
, from_micros()
があるが同じことなので省略。
加算・減算
fn main() { let du = std::time::Duration::from_secs(1) + std::time::Duration::from_nanos(234567890); println!("{:?}", du); println!("{:?}", du.as_secs()); println!("{:?}", du.subsec_nanos()); let du = std::time::Duration::from_secs(5) - std::time::Duration::from_secs(2); // thread 'main' panicked at 'overflow when subtracting durations' println!("{:?}", du); println!("{:?}", du.as_secs()); println!("{:?}", du.subsec_nanos()); }
1.23456789s 1 234567890 3s 3 0
なお、減算は負数になるとエラーになる。
let du = std::time::Duration::from_secs(1) - std::time::Duration::from_secs(2);
thread 'main' panicked at 'overflow when subtracting durations', src/libcore/option.rs:1036:5 note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
まとめ
単位系
単位 | 桁 |
---|---|
secs |
1 |
millis |
10^-3 |
micros |
10^-6 |
nanos |
10^-9 |
それぞれに以下メソッドがある。
単位系メソッド | 意味 |
---|---|
as_ |
各単位における整数値を返す |
from_ |
各単位における整数値からDurationを生成して返す |
subsec_ |
各単位における整数値からその時間を減らした整数値を返す |
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- rustc 1.36.0 (a53f9df32 2019-07-03)
- cargo 1.36.0 (c4fcfb725 2019-05-15)
$ uname -a Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
前回まで
- Rust学習まとめ(ドキュメント)
- Rust自習(じゃんけんゲーム1)
- Rust自習(双方向リスト1)
- Rust自習(単方向リスト1)
- Rust自習(単方向リスト2)
- Rust自習(単方向リスト3)
- Rust自習(単方向リスト4)
- Rust自習(単方向リスト5)
- Rust自習(単方向リスト6)
- Rust自習(単方向リスト7)
- Rust自習(リストのインタフェースを考える)
- Rust自習(連結リスト1)
- Rust自習(連結リスト2)
- Rust自習(連結リスト3)
- Rust自習(連結リスト4)
- Rust自習(連結リストの取得系インタフェース考察)
- Rust自習(連結リスト5)
- Rust自習(連結リストの取得系インタフェース考察2)
- Rust自習(連結リスト6)
- Rust自習(連結リスト7)
- Rust自習(連結リスト8)
- Rust自習(連結リスト9)
- Rust自習(変数名でイテレートする方法)
- Rust自習(iter、iter_mut実装方法)
- Rust自習(連結リスト10)
- Rust自習(rev()実装できず)
- Rust自習(cycle()実装できず)
- Rust自習(じゃんけんゲーム2)
- Rust自習(じゃんけんゲーム3)
- Rust自習(じゃんけんゲーム4)
- Rust自習(じゃんけんゲーム5)
- Rust自習(じゃんけんゲーム6)
- Rust自習(じゃんけんゲーム7)
- Rust自習(じゃんけんゲーム8)
- Rustのアップデート(rustup update)
- Rust自習(SQLite3 1)
- Rust自習(SQLite3 2)
- Rust自習(SQLite3 3)
- Rust自習(日時 1 chrono)
- Rust自習(日時 2 chrono)
- Rust自習(日時 3 chrono)
- Rust自習(日時 4 chrono)
- Rust自習(日時 5 chrono)
- Rust自習(日時 6 chrono)
- Rust自習(日時 7 chrono)
- Rust自習(std::time::SystemTime)
- Rust自習(std::time::Instant)