我是靠谱客的博主 跳跃花卷,最近开发中收集的这篇文章主要介绍long型时间格式 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)的秒数。在CC++ 语言中,用数据类型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: %sn", (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("%ldn",t);

free(tmp_time);

}

最后

以上就是跳跃花卷为你收集整理的long型时间格式 c语言,c语言中的时间戳和时间格式的全部内容,希望文章能够帮你解决long型时间格式 c语言,c语言中的时间戳和时间格式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部