2014-10-27 3 views

ответ

13

Вы можете использовать time crate:

extern crate time; 

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

Это возвращает Tm, который вы можете получить то, что точность вы хотите.

+2

Функции «exact_time _...» из этого ящика также актуальны, если вы просто хотите измерить относительные времена. – huon

+0

Как получить миллисекунды? –

+1

Вы должны использовать 'time :: now_utc()' или 'time :: get_time()', поскольку Java System.currentTimeMillis() возвращает время UTC. Я бы написал «let timespec = time :: get_time(); let mills = timespec.sec + timespec.nsec как i64/1000/1000; ' –

2
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); 
} 

Rust Playground

+0

Это не возвращает то же значение, что и System.currentTimeMillis() – josehzz

+0

True, он возвращает время в секундах. Чтобы получить миллис, вы должны умножить sec на 1000 и делить nsec на 1000 меньше (как это делают другие ответы). – contradictioned

+0

@contradictioned https://play.rust-lang.org/?gist=c047b64111280878ba5f674024374278&version=stable –

13

Если вы просто хотите, чтобы делать простые тайминги с миллисекундах, вы можете использовать std::time::Instant так:

use std::time::Instant; 

fn main() { 
    let start = Instant::now(); 

    // do stuff 

    let elapsed = start.elapsed(); 
    // debug format: 
    println!("{:?}", elapsed); 
    // or format as milliseconds: 
    println!("Elapsed: {} ms", 
      (elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos()/1_000_000) as u64); 

} 
+0

Также см. [RFC-выпуск 1545] (https://github.com/rust-lang/rfcs/issues/1545) для добавления 'as_millis' до' Duration'. – robinst

+0

Вы можете проверить https://doc.rust-lang.org/1.8.0/std/time/struct.Instant.html#method.duration_since, если хотите длительность. – vinyll

2

System.currentTimeMillis() в Java возвращает разницу в миллисекундах между текущим временем и полночь, 1 января 1970 года.

В Rust у нас есть time::get_time(), который возвращаетс текущим временем в секундах и смещение в наносекунд с полуночи 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); 
} 

Ссылка: Time crate, System.currentTimeMillis()

14

Так как ржавчина 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_secs() * 1000 + 
      since_the_epoch.subsec_nanos() as u64/1_000_000; 
1

Я нашел четкое решение с chrono в coinnect:

use chrono::prelude::*; 

pub fn get_unix_timestamp_ms() -> i64 { 
    let now = Utc::now(); 
    let seconds: i64 = now.timestamp(); 
    let nanoseconds: i64 = now.nanosecond() as i64; 
    (seconds * 1000) + (nanoseconds/1000/1000) 
} 

pub fn get_unix_timestamp_us() -> i64 { 
    let now = Utc::now(); 
    let seconds: i64 = now.timestamp(); 
    let nanoseconds: i64 = now.nanosecond() as i64; 
    (seconds * 1000 * 1000) + (nanoseconds/1000) 
} 
Смежные вопросы