Перевести UTC в дни, часы, минуты и т. Д. В C - PullRequest
0 голосов
/ 14 октября 2010

У меня есть long, который имеет время в формате UTC как метку времени для некоторых данных, теперь я хочу преобразовать его в этот формат: месяц 1-12 День 1-31 24-часовой формат 0-23 минут 0-59 второй 0-59 наносекунды 0-999,999,999

теперь наносекунды, очевидно, могут быть установлены в 0, поскольку это не должно быть настолько точным.

Какой лучший способ сделать это? Я видел множество примеров, но они сбивают с толку и, кажется, не работают для преобразования произвольной даты, они работают только для преобразования точного времени в тот момент.

Ответы [ 3 ]

0 голосов
/ 14 октября 2010

Вот, пожалуйста. Обратите внимание на закомментированные строки

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

int main(void) {
  char buf[512];
  long stamp = 1287055578;
  struct tm x;
  time_t cstamp = stamp;       /* 1 */
  x = *gmtime(&cstamp);        /* 2 */

  sprintf(buf, "month %d Day %d 24 Hour format %d minute %d second %d "
               "subsecond nanoseconds 0",
               x.tm_mon + 1, x.tm_mday, x.tm_hour, x.tm_min, x.tm_sec);

  printf("%s\n", buf); /* long converted to string */
  return 0;
}

1) gmtime принимает значение типа time_t*, поэтому я неявно преобразую long в time_t и передам этот адрес на следующем шаге

2) gmtime возвращает указатель на объект struct tm. Разыщите этот указатель и скопируйте объект в мою локальную x переменную

Вместо gm_time вы можете использовать localtime, чтобы библиотечные функции могли справляться с часовыми поясами и переходами на летнее время.

0 голосов
/ 19 октября 2010

спасибо за ответы всем, я закончил тем же путем

long UTCInSeconds = ...

struct tm * local;
local = localtime(UTCInSeconds);

Month = local->tm_mon + 1;
Day = local->tm_mday;
Year = local->tm_year + 1900;
Hour = local->tm_hour;
Minute = local->tm_min;
Second = local->tm_sec;
0 голосов
/ 14 октября 2010

Возможно, вы захотите заглянуть в заголовок ctime . asctime , strftime , ctime и т.д. преобразует время в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...