Как получить значение часа из текущего времени в Unix (используя C) - PullRequest
3 голосов
/ 23 августа 2010

У меня есть программа ниже, чтобы получить текущую дату и время.

int main(void)  
{  
  time_t result;  
  result = time(NULL);  
  struct tm* brokentime = localtime(&result);  
  printf("%s", asctime(brokentime));  
  return(0);  
}

И вывод программы следующий:

Tue Aug 24 01:02:41 2010

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

Спасибо

Ответы [ 4 ]

5 голосов
/ 23 августа 2010
struct tm* brokentime = localtime(&result); 
int hour = brokentime->tm_hour;
2 голосов
/ 23 августа 2010

Если вы хотите, чтобы оно было числом (а не строкой), просто зайдите в соответствующее поле в структуре brokentime:

time_t result;  
result = time(NULL);  
struct tm* brokentime = localtime(&result);  
int h = brokentime->tm_hour; /* h now contains the hour (1) */

Если вы хотите, чтобы она была в виде строки, вам придется отформатировать строку самостоятельно (вместо использования asctime):

time_t result;  
result = time(NULL);  
struct tm* brokentime = localtime(&result);  
char hour_str[3];

strftime(hour_str, sizeof(hour_str), "%H", brokentime);
/* hour_str now contains the hour ("01") */

Используйте %I вместо %H, чтобы получить 12-часовое время вместо 24-часового.

1 голос
/ 23 августа 2010

Вы должны использовать tm.tm_hour для значения часа, а также другие (минуты, секунды, месяц и т. Д.)

0 голосов
/ 24 августа 2010

Структура тм состоит из следующего. Некоторая информация отсутствует в ответах выше, хотя они прекрасно отвечают ОП.

The meaning of each is:
Member  Meaning                       Range
tm_sec  seconds after the minute      0-61*
tm_min  minutes after the hour        0-59
tm_hour hours since midnight         0-23
tm_mday day of the month             1-31
tm_mon  months since January          0-11
tm_year years since 1900    
tm_wday days since Sunday            0-6
tm_yday days since January 1         0-365
tm_isdst    Daylight Saving Time flag

Таким образом, вы можете получить доступ к значениям из этой структуры.

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