es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mostrar siempre milisegundos al analizar una fecha y hora con chrono en Rust?

Estoy tratando de formatear un chrono::NaiveDate de la siguiente manera: %Y-%m-%dT%H:%M:%S%.f.

De acuerdo al tercer ejemplo en la documentación, esperaba que funcionara de la siguiente manera:

use chrono::NaiveDate;

fn main() {
    let date = NaiveDate::from_ymd(2015, 7, 1).and_hms_milli(0, 0, 0, 0);
    println!("{}", date.format("%Y-%m-%dT%H:%M:%S%.f"));
}

Sin embargo, en vez del resultado deseado 2015-07-01T00:00:00.000, esto imprime 2015-07-01T00:00:00.

El Playground de Rust está aquí.

Aparentemente, los milisegundos solo se incluyen si no son cero. ¿Hay alguna opción para incluirlos siempre?

use chrono::NaiveDate;

fn main() {
    let date = NaiveDate::from_ymd(2015, 7, 1).and_hms_milli(0, 0, 0, 1);
    println!("{}", date.format("%Y-%m-%dT%H:%M:%S%.f"));
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para incluir siempre los milisegundos aunque sean cero, puedes utilizar la cadena de formato %3f en lugar de %.f. %3f garantiza que siempre haya exactamente tres dígitos para los milisegundos, rellenando con ceros si es necesario. Aquí hay un ejemplo:

    use chrono::NaiveDate;
    
    fn main() {
        let date = NaiveDate::from_ymd(2015, 7, 1).and_hms_milli(0, 0, 0, 0);
        println!("{}", date.format("%Y-%m-%dT%H:%M:%S.%3f"));
    }
    

    Esto imprimirá 2015-07-01T00:00:00.000.

Comments are closed.