如何从unix中获取当前时间的小时值(使用C)

时间:2010-08-23 19:27:02

标签: c unix

我有以下程序来获取当前日期和时间。

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 个答案:

答案 0 :(得分:5)

struct tm* brokentime = localtime(&result); 
int hour = brokentime->tm_hour;

答案 1 :(得分:2)

如果您想将它作为数字(而不是字符串),那么只需访问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小时的时间。

答案 2 :(得分:1)

您应该使用tm.tm_hour作为小时值,以及其他(小时,秒,月等)

答案 3 :(得分:0)

Struct tm包含以下内容。上面的答案中没有提供一些信息,尽管他们完美地回答了OP。

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

因此,您可以访问此结构中的值。