Imprimindo a data / hora atual com precisão de sub-segundo

6

O GNU date(1) compreende a especificação do formato %N , que gera nanossegundos, portanto:

$ date +%H:%M:%S.%N

saídas 19: 10: 03.725196000

A data do BSD não compreende% N. Como posso imprimir a hora atual com precisão de sub-segundo no OS X?

    
por Daniel Serodio 01.11.2011 / 19:14

1 resposta

5

Se você tem um interpretador Perl moderno o bastante ( Time::HiRes é empacotado desde a versão 5.7.2), você pode usar alguma variação disso:

#!/usr/bin/env perl
use strict;
use warnings;

use Time::HiRes qw(gettimeofday);
use POSIX       qw(strftime);

my ($s,$us) = gettimeofday();
printf "%s.%06d\n", strftime("%H:%M:%S", localtime($s)), $us;

Exemplo de saída:

$ ./t.pl 
19:52:35.408520

Se você não tem perl (ou não quer usá-lo), mas você tem um compilador C, você pode usar isto:

#include <time.h>
#include <stdio.h>
#include <sys/time.h>

int main(void)
{
    struct timeval now;
    struct tm *tmp;
    char timestr[9];
    int rc;

    rc = gettimeofday(&now, 0);
    if (rc != 0) {
        perror("gettimeofday");
        return 1;
    }

    tmp = localtime(&now.tv_sec);
    if (tmp == 0) {
        perror("localtime");
        return 1;
    }

    rc = strftime(timestr, sizeof(timestr), "%H:%M:%S", tmp);
    if (rc == 0) {
        fprintf(stderr, "strftime call failed.\n");
        return 1;
    }
    printf("%s.%06ld\n", timestr, now.tv_usec);
    return 0;
}
    
por 01.11.2011 / 19:53

Tags