Wie kann ich die aktuelle Zeit in Millisekunden wie in Java abrufen?
System.currentTimeMillis()
Antworten:
Seit Rust 1.8 müssen Sie keine Kiste mehr verwenden. Stattdessen können Sie verwenden SystemTimeund 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);
}
Wenn Sie genau Millisekunden benötigen, können Sie die konvertieren 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 erneut lesen für : Es gibt keine Methode, um "die Anzahl der Sekunden" von einem Augenblick an abzurufen. Stattdessen können Sie nur die Dauer zwischen zwei Zeitpunkten messen (oder zwei Zeitpunkte vergleichen).
Wenn Sie nur einfache Timings mit den Millisekunden durchführen möchten, können Sie Folgendes verwenden std::time::Instant:
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);
}
Ausgabe:
Debug: 10.93993ms
Millis: 10 ms
Millis: 10 ms
u128 is not supported.
Sie können die Zeitkiste verwenden :
extern crate time;
fn main() {
println!("{}", time::now());
}
Es gibt eine zurück, mit Tmder Sie die gewünschte Präzision erzielen können.
precise_time_...Funktionen dieser Kiste sind auch relevant, wenn man nur die relativen Zeiten messen möchte.
time::now_utc()oder time::get_time()da Javas System.currentTimeMillis () die UTC-Zeit zurückgibt. Ich würde schreibenlet timespec = time::get_time(); let mills = timespec.sec + timespec.nsec as i64 / 1000 / 1000;
chronostattdessen eine Kiste.
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() in Java gibt die Differenz in Millisekunden zwischen der aktuellen Zeit und Mitternacht, dem 1. Januar 1970, zurück.
In Rust haben wir eine, time::get_time()die a Timespecmit der aktuellen Zeit als Sekunden und dem Offset in Nanosekunden seit Mitternacht, dem 1. Januar 1970, zurückgibt .
Beispiel (mit 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);
}
Referenz: Zeitkiste , System.currentTimeMillis ()