현재 시간 (밀리 초)을 어떻게 얻을 수 있습니까?


84

Java에서와 같이 현재 시간을 밀리 초 단위로 어떻게 얻을 수 있습니까?

System.currentTimeMillis()

답변:


114

Rust 1.8부터는 상자를 사용할 필요가 없습니다. 대신 사용할 수 있습니다 SystemTimeUNIX_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.

녹 1.33

let in_ms = since_the_epoch.as_millis();

러스트 1.27

let in_ms = since_the_epoch.as_secs() as u128 * 1000 + 
            since_the_epoch.subsec_millis() as u128;

러스트 1.8

let in_ms = since_the_epoch.as_secs() * 1000 +
            since_the_epoch.subsec_nanos() as u64 / 1_000_000;

왜 즉시가 아닌 시스템 시간입니까?
Andy Hayden 19 년

2
당신이하실 수 있습니다 @AndyHayden 다시 읽기 에 대한 문서를Instant : 즉석에서 "초"를 얻을 수있는 방법이 없습니다. 대신 두 순간 사이의 기간 측정 (또는 두 순간 비교) 만 허용합니다.
Shepmaster

36

밀리 초로 간단한 타이밍을 수행하려면 다음 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

.NET Framework 에 추가 as_millis하려면 RFC 문제 1545 도 참조하세요 Duration.
robinst

기간을 원하시면 doc.rust-lang.org/1.8.0/std/time/… 을 확인하실 수 있습니다 .
vinyll

원인 u128 is not supported.
Pedro Paulo Amorim

16

시간 상자를 사용할 수 있습니다 .

extern crate time;

fn main() {
    println!("{}", time::now());
}

Tm원하는 정밀도를 얻을 수있는를 반환합니다 .


2
precise_time_...상대 시간을 측정하려는 경우 해당 상자 의 기능도 관련이 있습니다.
huon

밀리 초는 어떻게 얻습니까?
アレックス

1
Java의 System.currentTimeMillis ()가 UTC 시간을 반환하므로 time::now_utc()또는 을 사용해야 time::get_time()합니다. 나는 쓸 것입니다let timespec = time::get_time(); let mills = timespec.sec + timespec.nsec as i64 / 1000 / 1000;
Nándor Krácser 2014

1
time :: precise_time_ns () 및 time :: precise_time_s ()
tyoc213

5
이 상자는 이제 더 이상 사용되지 않습니다. chrono대신 상자를 사용하십시오 .
Ondrej Slinták

13

나는 coinnect 에서 chrono 로 명확한 해결책을 찾았 습니다 .

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()
}

6
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 ()와 같은 값을 반환하지 않습니다
josehzz

사실, 시간을 초 단위로 반환합니다. millis를 얻으려면 sec에 1000을 곱하고 nsec를 1000으로 나누어야합니다 (다른 답변이 올바르게 수행했듯이).
모순

@contradictioned play.rust-lang.org/…
Zijun Luo

4

System.currentTimeMillis() Java에서는 현재 시간과 1970 년 1 월 1 일 자정 사이의 차이 (밀리 초)를 반환합니다.

Rust에서는 1970 년 1 월 1 일 자정 이후 현재 시간을 초로, 오프셋을 나노초 단위로 time::get_time()반환하는 a Timespec를 가지고 있습니다 .

예 (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);
}

참조 : Time crate , System.currentTimeMillis ()


상자 링크가 유효하지 않습니다.
Ixx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.