Как узнать текущее время в миллисекундах, как в Java?
System.currentTimeMillis()
Начиная с Rust 1.8, вам не нужно использовать ящик. Вместо этого вы можете использовать SystemTime
и 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);
}
Если вам нужно ровно миллисекунды, вы можете преобразовать 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
: Не существует способа получить "количество секунд" с одного момента. Вместо этого он позволяет только измерять продолжительность между двумя моментами (или сравнивать два момента).Если вы просто хотите использовать простые тайминги с миллисекундами, вы можете использовать
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); }
Вывод:
Debug: 10.93993ms Millis: 10 ms Millis: 10 ms
источник
as_millis
вDuration
.u128 is not supported
.Вы можете использовать ящик времени :
extern crate time; fn main() { println!("{}", time::now()); }
Он возвращает,
Tm
который вы можете получить с любой точностью.источник
precise_time_...
функции из этого ящика также важны, если один только хотят измерить относительное время.time::now_utc()
или,time::get_time()
поскольку Java System.currentTimeMillis () возвращает время в формате UTC. Я бы написалlet timespec = time::get_time(); let mills = timespec.sec + timespec.nsec as i64 / 1000 / 1000;
chrono
Вместо этого используйте ящик.Я нашел четкое решение с хроно в coinnect :
use chrono::prelude::*; pub fn get_unix_timestamp_ms() -> i64 { let now = Utc::now(); now.timestamp_millis() } pub fn get_unix_timestamp_us() -> i64 { let now = Utc::now(); now.timestamp_nanos() }
источник
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()
в Java возвращает разницу в миллисекундах между текущим временем и полуночью 1 января 1970 года.В Rust у нас есть функция,
time::get_time()
которая возвращаетTimespec
текущее время в секундах и смещение в наносекундах с полуночи 1 января 1970 года.Пример (с использованием 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); }
Ссылка: ящик времени , System.currentTimeMillis ()
источник
Как упоминал @Shepmaster, это эквивалент Java
System.currentTimeMillis()
в Rust.use std::time::{SystemTime, UNIX_EPOCH}; fn get_epoch_ms() -> u128 { SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_millis() }
источник