linux的时间相关函数

linux的系统时间有三种表示格式:

1)time_t为日历时间,表示的时间以秒为单位,表示从1970年1月1日00:00:00到现在的时间

2)struct tm数据结构表示以年月日格式表示的时间

struct tm
{
  int tm_sec;            /* Seconds.    [0-60] (1 leap second) */
  int tm_min;            /* Minutes.    [0-59] */
  int tm_hour;            /* Hours.    [0-23] */
  int tm_mday;            /* Day.        [1-31] */
  int tm_mon;            /* Month.    [0-11] */
  int tm_year;            /* Year    - 1900.  */
  int tm_wday;            /* Day of week.    [0-6] */
  int tm_yday;            /* Days in year.[0-365]    */
  int tm_isdst;            /* DST.        [-1/0/1]*/

#ifdef    __USE_BSD
  long int tm_gmtoff;        /* Seconds east of UTC.  */
  __const char *tm_zone;    /* Timezone abbreviation.  */
#else
  long int __tm_gmtoff;        /* Seconds east of UTC.  */
  __const char *__tm_zone;    /* Timezone abbreviation.  */
#endif
};

3)以字符串格式表示的时间


获取时间都用time()函数从系统获取time_t日历时间,然后可以在三种格式的时间间进行转换

相关时间处理的函数原型:

extern time_t time (time_t *__timer) __THROW;

extern time_t mktime (struct tm *__tp) __THROW;

extern char *asctime (__const struct tm *__tp) __THROW;

extern char *ctime (__const time_t *__timer) __THROW;

extern struct tm *gmtime (__const time_t *__timer) __THROW;

extern struct tm *localtime (__const time_t *__timer) __THROW;

extern size_t strftime (char *__restrict __s, size_t __maxsize,__const char *__restrict __format,   __const struct tm *__restrict __tp) __THROW;

extern int gettimeofday (struct timeval *__restrict __tv,timezone_ptr_t __tz) __THROW __nonnull ((1));

/* Time used by the program so far (user time + system time).
   The result / CLOCKS_PER_SECOND is program time in seconds.  */
extern clock_t clock (void) __THROW;


struct timeval
  {
    __time_t tv_sec;        /* Seconds.  */
    __suseconds_t tv_usec;    /* Microseconds.  */
  };

struct timezone
  {
    int tz_minuteswest;        /* Minutes west of GMT.  */
    int tz_dsttime;        /* Nonzero if DST is ever in effect.  */
  };


跟延时相关的函数:

短延时,这些函数读是忙等待函数,等待超时过程中不会处理其他事情

void ndelay(unsigned long x)

void udelay(unsigned long x)

void mdelay(unsigned long x)

长延时:

void msleep(unsigned int msecs);
unsigned long msleep_interruptible(unsigned int msecs);
void ssleep(unsigned int seconds)

sleep()

schedule_timeout()


示例程序:

int main(int argc, char *argv[])
{
    time_t my_time;   //日历时间,以秒为计数的时间
    struct tm *my_tm;  //转换为年月日表示的时间
    char tm_buf[200];
    char *time_buf;

    //获取日历时间
    time(&my_time);
    printf("my_time: %d\n", (int)my_time);

    //将日历时间转换为本地时间
    my_tm = localtime(&my_time);

    //将本地时间转为日历时间
    my_time = mktime(my_tm);
    printf("my_time: %d\n", (int)my_time);

    time_buf = malloc(200);
    //将日历时间表示为字符串表示的时间
    time_buf = ctime(&my_time);
    puts(time_buf);

    my_tm = gmtime(&my_time);

    //将本地时间表示为字符串表示的时间
    time_buf = asctime(my_tm);
    puts(time_buf);

    //将tm表示的时间转换为字符串表示的时间,但是可控制的格式比asctime函数丰富
    if(strftime(tm_buf, sizeof(tm_buf), "%c", my_tm) == 0 ) {
        puts("error");
    }
    puts(tm_buf);

    //获取字符串表示的年分
    if(strftime(tm_buf, sizeof(tm_buf), "%Y", my_tm) == 0 ) {
        puts("error");
    }
    puts(tm_buf);


   free(time_buf);

    exit(0);
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值