Jak mogę uzyskać bieżący czas w milisekundach, tak jak w Javie?
System.currentTimeMillis()
Odpowiedzi:
Od wersji Rust 1.8 nie musisz używać skrzynki. Zamiast tego możesz użyć SystemTime
i UNIX_EPOCH
:
use std::time::{SystemTime, UNIX_EPOCH};
fn main() {
let start = SystemTime::now();
let since_the_epoch = start
.duration_since(UNIX_EPOCH)
.expect("Time went backwards");
println!("{:?}", since_the_epoch);
}
Jeśli potrzebujesz dokładnie milisekund, możesz przekonwertować plik Duration
.
let in_ms = since_the_epoch.as_millis();
let in_ms = since_the_epoch.as_secs() as u128 * 1000 +
since_the_epoch.subsec_millis() as u128;
let in_ms = since_the_epoch.as_secs() * 1000 +
since_the_epoch.subsec_nanos() as u64 / 1_000_000;
Instant
: Nie ma metody na uzyskanie „liczby sekund” w jednej chwili. Zamiast tego pozwala tylko mierzyć czas trwania między dwoma momentami (lub porównywać dwa momenty).
Jeśli chcesz po prostu mierzyć czas z milisekundami, możesz użyć std::time::Instant
tego:
use std::time::Instant;
fn main() {
let start = Instant::now();
// do stuff
let elapsed = start.elapsed();
// Debug format
println!("Debug: {:?}", elapsed);
// Format as milliseconds rounded down
// Since Rust 1.33:
println!("Millis: {} ms", elapsed.as_millis());
// Before Rust 1.33:
println!("Millis: {} ms",
(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 1_000_000) as u64);
}
Wynik:
Debug: 10.93993ms
Millis: 10 ms
Millis: 10 ms
u128 is not supported
.
Możesz użyć skrzynki czasu :
extern crate time;
fn main() {
println!("{}", time::now());
}
Zwraca wartość, Tm
którą możesz uzyskać dowolną precyzję.
precise_time_...
funkcje z tej skrzyni są również istotne, jeśli ktoś po prostu chce się mierzyć czasy względne.
time::now_utc()
lub, time::get_time()
ponieważ System.currentTimeMillis () języka Java zwraca czas UTC. Chciałbym napisaćlet timespec = time::get_time(); let mills = timespec.sec + timespec.nsec as i64 / 1000 / 1000;
chrono
Zamiast tego użyj skrzynki.
extern crate time;
fn timestamp() -> f64 {
let timespec = time::get_time();
// 1459440009.113178
let mills: f64 = timespec.sec as f64 + (timespec.nsec as f64 / 1000.0 / 1000.0 / 1000.0);
mills
}
fn main() {
let ts = timestamp();
println!("Time Stamp: {:?}", ts);
}
System.currentTimeMillis()
w języku Java zwraca różnicę w milisekundach między bieżącą godziną a północą 1 stycznia 1970 r.
W Rust mamy time::get_time()
która zwraca a Timespec
z aktualnym czasem w sekundach i przesunięciem w nanosekundach od północy 1 stycznia 1970 roku.
Przykład (przy użyciu Rust 1.13):
extern crate time; //Time library
fn main() {
//Get current time
let current_time = time::get_time();
//Print results
println!("Time in seconds {}\nOffset in nanoseconds {}",
current_time.sec,
current_time.nsec);
//Calculate milliseconds
let milliseconds = (current_time.sec as i64 * 1000) +
(current_time.nsec as i64 / 1000 / 1000);
println!("System.currentTimeMillis(): {}", milliseconds);
}
Odniesienie: skrzynka czasu , System.currentTimeMillis ()
Jak wspomniał @Shepmaster, jest to odpowiednik Java System.currentTimeMillis()
w Rust.
use std::time::{SystemTime, UNIX_EPOCH};
fn get_epoch_ms() -> u128 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis()
}