¿Cómo puedo obtener la hora actual en milisegundos?


84

¿Cómo puedo obtener la hora actual en milisegundos como puedo en Java?

System.currentTimeMillis()

Respuestas:


114

Desde Rust 1.8, no es necesario utilizar una caja. En su lugar, puede usar SystemTimey 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);
}

Si necesita exactamente milisegundos, puede convertir el Duration .

Óxido 1.33

let in_ms = since_the_epoch.as_millis();

Óxido 1,27

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

Óxido 1.8

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

¿Por qué systemtime en lugar de instantáneo?
Andy Hayden

2
@AndyHayden es posible que desee volver a leer la documentación paraInstant : No hay ningún método para obtener "la cantidad de segundos" de un instante. En cambio, solo permite medir la duración entre dos instantes (o comparar dos instantes).
Shepmaster

36

Si solo desea hacer tiempos simples con milisegundos, puede usar std::time::Instantasí:

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

Salida:

Debug: 10.93993ms
Millis: 10 ms
Millis: 10 ms

Véase también el tema RFC 1545 para añadir as_millisa Duration.
robinst

Es posible que desee consultar doc.rust-lang.org/1.8.0/std/time/… si desea duración.
vinyll

Causado u128 is not supported.
Pedro Paulo Amorim

16

Puedes usar la caja de tiempo :

extern crate time;

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

Devuelve un valor Tmque puede obtener la precisión que desee.


2
Las precise_time_...funciones de esa caja también son relevantes, si solo se desea medir tiempos relativos.
huon

¿Cómo obtengo milisegundos?
ア レ ッ ク ス

1
Tienes que usar time::now_utc()o time::get_time()ya que System.currentTimeMillis () de Java devuelve la hora UTC. Escribiríalet timespec = time::get_time(); let mills = timespec.sec + timespec.nsec as i64 / 1000 / 1000;
Nándor Krácser

1
hora :: precisa_hora_ns () y hora :: precisa_hora_s ()
tyoc213

5
Esta caja ahora está en desuso. En su lugar, use una chronocaja.
Ondrej Slinták

13

Encontré una solución clara con chrono en 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()
}

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

Patio de recreo de óxido


Esto no devuelve el mismo valor que System.currentTimeMillis ()
josehzz

Es cierto que devuelve el tiempo en segundos. Para obtener los milis, debe multiplicar sec por 1000 y dividir nsec por 1000 menos (como lo hacen otras respuestas correctamente).
contradecida el

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

4

System.currentTimeMillis() en Java devuelve la diferencia en milisegundos entre la hora actual y la medianoche del 1 de enero de 1970.

En Rust tenemos time::get_time()que devuelve un Timespeccon la hora actual en segundos y el desplazamiento en nanosegundos desde la medianoche del 1 de enero de 1970.

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

Referencia: caja de tiempo , System.currentTimeMillis ()


El enlace a la caja no es válido.
Ixx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.