¿Cómo obtengo la hora actual en Linux en milisegundos?¿Cómo obtener la hora actual en milisegundos desde C en Linux?
Respuesta
Utilice gettimeofday()
para obtener el tiempo en segundos y microsegundos. La combinación y el redondeo a milisegundos se deja como un ejercicio.
Si está buscando algo para escribir en su línea de comandos, date +%H:%M:%S.%N
le dará el tiempo con nanosegundos.
No exactamente: la pregunta está etiquetada como 'C' y pregunta por el tiempo de época en milisegundos. – pilcrow
que tiene que hacer algo como esto:
struct timeval tv;
gettimeofday(&tv, NULL);
double time_in_mill =
(tv.tv_sec) * 1000 + (tv.tv_usec)/1000 ; // convert tv_sec & tv_usec to millisecond
A continuación se presenta la función util para obtener fecha y hora actual en milisegundos:
#include <sys/time.h>
long long current_timestamp() {
struct timeval te;
gettimeofday(&te, NULL); // get current time
long long milliseconds = te.tv_sec*1000LL + te.tv_usec/1000; // calculate milliseconds
// printf("milliseconds: %lld\n", milliseconds);
return milliseconds;
}
Acerca de zona horaria:
gettimeofday() asistencia para spe cify timezone, Uso NULL, que ignoran la zona horaria, pero puede especificar una zona horaria, si es necesario.
@Update - zona horaria
Desde el long
representación del tiempo no es relevante para o zona horaria efectuada por sí mismo, por lo que establecer tz
parámetro de gettimeofday() no es necesario, ya que ganó No importa.
Y, según hombre página de gettimeofday()
, el uso de la estructura timezone
es obsoleta, por lo tanto el argumento tz
normalmente se debe especificar como NULL, para obtener más información por favor consulte la página de manual.
> gettimeofday() admite especificar zona horaria, uso NULL, que ignora la zona horaria, pero puede especificar una zona horaria, si es necesario. Usted está equivocado. La zona horaria debe introducirse exclusivamente mediante call a localtime(). –
@ vitaly.v.ch Hice una prueba, pasando el 'tz' param de' gettimeofday() 'como' & (struct timezone tz = {480, 0}) 'no recibirá ninguna advertencia, y no lo hará Tiene algún efecto sobre el resultado, eso tiene sentido, ya que la representación "larga" del tiempo no es relevante ni se ve afectada por la zona horaria misma, ¿verdad? –
No había ninguna razón para hacer ninguna prueba. El kernel de Linux no tiene la información adecuada sobre las zonas horarias, y al mismo tiempo no tiene una forma de proporcionarlo. Es una razón por la cual el argumento tz se procesa de manera muy específica. la larga representación no importa. –
Esto se puede lograr utilizando la función clock_gettime
.
En la versión actual de POSIX, gettimeofday
es marked obsolete. Esto significa que puede eliminarse de una versión futura de la especificación. Se recomienda a los escritores de aplicaciones que utilicen la función clock_gettime
en lugar de gettimeofday
.
Aquí es un ejemplo de cómo utilizar clock_gettime
:
#define _POSIX_C_SOURCE 200809L
#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
void print_current_time_with_ms (void)
{
long ms; // Milliseconds
time_t s; // Seconds
struct timespec spec;
clock_gettime(CLOCK_REALTIME, &spec);
s = spec.tv_sec;
ms = round(spec.tv_nsec/1.0e6); // Convert nanoseconds to milliseconds
if (ms > 999) {
s++;
ms = 0;
}
printf("Current time: %"PRIdMAX".%03ld seconds since the Epoch\n",
(intmax_t)s, ms);
}
Si su objetivo es medir el tiempo transcurrido, y el sistema es compatible con el "reloj monótona" opción, entonces usted debería considerar el uso CLOCK_MONOTONIC
en lugar de CLOCK_REALTIME
.
+1 por ser POSIXly correcto, pero su respuesta tiene las unidades incorrectas. El OP no quiere el tiempo _with_ milisegundos, pero el tiempo _en_ milisegundos. – pilcrow
Buena solución, pero no olvides el _-lm_ en tu comando 'gcc'. –
de acuerdo con la página de manual de round, quiere usar lround al asignar el resultado a un entero (o largo) – hildred
C11 timespec_get
Devuelve hasta nanosegundos, redondeado a la resolución de la aplicación.
Ya está implementado en Ubuntu 15.10. API tiene el mismo aspecto que el POSIX clock_gettime
.
#include <time.h>
struct timespec ts;
timespec_get(&ts, TIME_UTC);
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
Más detalles aquí: https://stackoverflow.com/a/36095407/895245
- 1. Cómo obtener la hora actual en milisegundos programación en C
- 2. ¿Cómo obtener la hora actual (en milisegundos) desde el reloj del sistema en Windows?
- 3. Obtenga la hora actual, en milisegundos, en C?
- 4. obtiene la hora actual en milisegundos usando C++ y Boost
- 5. ¿Hay alguna forma en XQuery de obtener la hora actual en milisegundos desde algún tiempo?
- 6. Obtener la hora actual en C
- 7. ¿Cómo puedo obtener milisegundos desde la medianoche UTC en C?
- 8. Cómo obtener la hora actual
- 9. ¿cómo puedo obtener la hora actual en C#?
- 10. Hora local con milisegundos
- 11. Obtener la fecha/hora actual en segundos
- 12. ¿Cómo obtener la hora actual del GPS?
- 13. ¿Cómo creo una fecha y hora en Python desde milisegundos?
- 14. obtener la hora actual en segundos
- 15. ¿Cómo obtener el tiempo en milisegundos desde la época de Unix en Javascript?
- 16. ¿Cómo obtener la fecha y hora actual?
- 17. C#: ¿Cómo obtendré la hora actual en una cadena?
- 18. cómo obtener la fecha y hora actual en SQL?
- 19. Cómo obtener la fecha actual Hora formateada en Flex
- 20. Obtener la hora actual del sistema?
- 21. C# - Formateo de la hora actual
- 22. calendario Java obtenga la fecha actual, sin horas, minutos, segundos y milisegundos, en milisegundos
- 23. Cómo obtener la hora actual en una cadena en formato personalizado en el objetivo c
- 24. Obtener la hora actual del sistema
- 25. ¿Cómo obtener el sello de hora actual?
- 26. ¿Cómo obtener minutos, segundos y milisegundos desde datetime.now() en python?
- 27. Android obtener la hora UTC actual
- 28. Obtener la última hora del archivo en linux
- 29. ¿Cómo obtener la hora actual en el código nativo de Android?
- 30. ¿Cómo puedo obtener fecha y hora actual en PHP
Es costumbre en StackOverflow a una pregunta en el cuerpo de su pregunta. – msw