linux 时间戳 c语言,c语言中的时间戳和时间格式

0、读取系统毫秒级时间long getCurrentTime()

{

struct timeval tv;

gettimeofday(&tv,NULL);

return tv.tv_sec * 1000 + tv.tv_usec / 1000;

}

1、时间戳(秒级)

在Linux系统中,时间戳是一个绝对值,表示距离时间(1970-1-1, 00:00:00)的秒数。在C\C++ 语言中,用数据类型time_t 表示时间戳,time_t 本质上是一个long int。获取当前时间的时间戳代码如下所示:#include

#include

int main(int argc, const char * argv[])

{

time_t now;

time(&now);

printf("now:%ld",now);

}

上面程序打印出的数据为“now:1470918308” ;1470918308表示当前时间距离格林威治时间的秒数;在shell终端下命令 "date -d @1470918308 " 打印出这个时间戳的日期格式为Thu Aug 11 20:22:47 CST 2016。

2、如何将时间戳转换成特定的时间格式

经常碰到的一个问题是将一个时间戳显示成指定的显示格式,比如讲上面的时间显示为2016-8-11。C/C++ 语言中,和时间操作相关的关键数据结构是struc tm,其定义如下:struct tm {

int tm_sec;        /* seconds  0-59*/

int tm_min;        /* minutes 0-59*/

int tm_hour;        /* hours 0-23*/

int tm_mday;        /* day of the month 1-31*/

int tm_mon;        /* month 0-11*/

int tm_year;        /* year *距离1990的年数/

int tm_wday;        /* day of the week 0-6*/

int tm_yday;        /* day in the year 0-365*/

int tm_isdst;      /* daylight saving time */

};

在将时间戳表示成指定格式前,我们需要将时间戳转换成tm数据结构。C/C++提供了俩个函数struct tm *gmtime(const time_t *timep) 和struct tm *localtime(const time_t *timep); 其中gtime转换后的tm是基于时区0的,而localtime转换后的是基于当地时区【中国为时区8】;因为同一时间戳在不同地区的表示时间是不一样的【因为时区不一样】。我们便可利用经过localtime转换后的tm展示当前时间了,tim_mo+1、tm_year+1990后才是我们想要看到的时间。我们也可以利用接口 size_t strftime(char *s, size_t max, const char *format,const struct tm *tm) 来定制我们的时间格式。#include

#include

int main(int argc, const char * argv[])

{

time_t t;

time(&t);

struct tm *tmp_time = localtime(&t);

char s[100];

strftime(s, sizeof(s), "%04Y%02m%02d %H:%M:%S", tmp_time);

printf("%d: %s\n", (int)t, s);

return 0;

}

上面程序输出的数据为:1470919776: 20160811 20:49:36。因此利用strftime我们可以随意定制化显示时间。

3、如何将时间格式转换时间戳

有时候我们并不是想得到当前时间戳(time(&t)),而是希望将特定时间格式转换成时间戳,比如计算2016/8/13的时间戳是多少。C/C++提供char *strptime(const char *s, const char *format, struct tm *tm);将时间格式字符串S按指定格式foramt解析成tm; 再用time_t mktime(struct tm *tm)函数将tm生成时间戳。例如程序打印2016/08/13的时间戳。#include

#include

int main(int argc, const char * argv[])

{

struct tm* tmp_time = (struct tm*)malloc(sizeof(struct tm));

strptime("2016/08/13/06/12","%Y/%m/%d/%H/%M",tmp_time); //按当地时区将2016/08/13/06/12解析成tmp_time

time_t t = mktime(tmp_time);//按当地时区解析tmp_time

printf("%ld\n",t);

free(tmp_time);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值