Làm cách nào tôi có thể lấy thời gian hiện tại tính bằng mili giây như tôi có thể làm trong Java?
System.currentTimeMillis()
Câu trả lời:
Kể từ Rust 1.8, bạn không cần sử dụng thùng. Thay vào đó, bạn có thể sử dụng SystemTime
và 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);
}
Nếu bạn cần chính xác mili giây, bạn có thể chuyển đổi 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
: Không có phương pháp nào để lấy "số giây" ngay lập tức. Thay vào đó, nó chỉ cho phép đo khoảng thời gian giữa hai phiên bản (hoặc so sánh hai phiên bản).
Nếu bạn chỉ muốn tính thời gian đơn giản với mili giây, bạn có thể sử dụng std::time::Instant
như sau:
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);
}
Đầu ra:
Debug: 10.93993ms
Millis: 10 ms
Millis: 10 ms
u128 is not supported
.
Bạn có thể sử dụng thùng thời gian :
extern crate time;
fn main() {
println!("{}", time::now());
}
Nó trả về giá trị Tm
mà bạn có thể nhận được bất kỳ độ chính xác nào bạn muốn.
precise_time_...
chức năng từ thùng đó cũng có liên quan, nếu người ta chỉ muốn đo thời gian tương đối.
time::now_utc()
hoặc time::get_time()
vì System.currentTimeMillis () của Java trả về thời gian UTC. Tôi sẽ viếtlet timespec = time::get_time(); let mills = timespec.sec + timespec.nsec as i64 / 1000 / 1000;
chrono
thùng thay thế.
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()
trong Java trả về sự khác biệt tính bằng mili giây giữa thời điểm hiện tại và nửa đêm, ngày 1 tháng 1 năm 1970.
Trong Rust, chúng tôi có time::get_time()
trả về a Timespec
với thời gian hiện tại là giây và phần bù tính bằng nano giây kể từ nửa đêm, ngày 1 tháng 1 năm 1970.
Ví dụ (sử dụng 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);
}
Tham khảo: Time crate , System.currentTimeMillis ()