C、C++时间与日期函数

标签: 时间 日期 函数 | 发表时间:2011-10-22 14:17 | 作者:dbzhang800 lyxint
出处:http://blog.csdn.net/dbzhang800
  • 由于自己实际工作学习中没怎么用时间和日期的函数,在看Unix环境高级编程6.10节和Python的time模块时,总感觉这些东西总是连不成串。

还是从C开始理一理吧。翻翻C标准(C++中的东西我看不懂),相关的也就是time.h这个东西了。

NULL CLOCKS_PER_SEC

类型

size_t clock_t time_t

结构体

tm

函数

asctime clock difftime localtime strftime
ctime gmtime mktime time

走马观花

暂时抛开和clock相关的东西。只看字面上和time直接相关的东西。


获取时间

如何从操作系统获取时间呢?

time_t time(time_t *t);

该函数返回从某个时间点(epoch)到现在为止所经过的秒数。(这个数称为日历时间) 比如:

1319206097
  • (一般情况下这个时间点都是公元1970年1月1日0时,但是微软的C/C++编译器版本7中用的却是1899年12月31日0时,注意,编译器的版本不是MVSC的版本,比如MSVC2010也叫VC9,但对应的编译器版本是16)

这个数字对人来说可真不友好。比如上面这个对应的具体日期是什么,如果不是我写的我还真不知道

转成字符串

char *ctime(const time_t *timep);

我们知道,同一时刻各个时区的时间是不同的。这个函数会考虑当前的时区(通过环境变量TZ)

Fri Oct 21 22:08:17 2011\n\0

这下好看多了,但还是很不够...

分解时间,结构体 tm

我们可以将日历时间,转成包含时分秒等信息的结构体。这样处理起来就方面多了。

struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);
  • 注意:返回的tm结构体的指针,指向的是其内部的一个静态tm结构体变量。

gmtime
格林威治时间

localtime
本地时间(东8区)

 

17

17

8

8

14

22

21

21

21日

9

9

10月(从0开始算)

111

111

2011年(从1900开始)

5

5

周五

293

293

一年中的第293天

0

0

不是夏时制

要从分解时间转换会日历时间,则使用

time_t mktime(struct tm *tm);

转成字符串2

前面的ctime可以从日历时间转成字符串,那么从分解时间如何转成字符串呢?

char *asctime(const struct tm *tm);

比如:前面的gmtime和localtime得到的分解时间,分别对应

Fri Oct 21 14:24:34 2011
Fri Oct 21 22:24:34 2011

不过这个东西太死板了吧,想自定义字符串怎么办?

size_t strftime(char *s, size_t max, const char *format,
                const struct tm *tm);

和printf类似,有一大堆转换符可用,这样一来,我们可以得到

Fri
Friday
2011-10-21
10:24:34 PM
...

类型

简单罗列一下:

time_t

一个整数类型,但具体的范围和精度是由编译器实现所定义的。

struct tm

结构体tm 表示 分解时间(broken-down time)

struct tm {       

 

     int tm_sec;  

 

     int tm_min;  

/* 分钟: [0 - 59] */

     int tm_hour; 

/* 小时: [0 - 23] */

     int tm_mday; 

/* 日: [1 - 31] */

     int tm_mon;  

/* 月: [0 - 11] */

     int tm_year; 

/* 年: 从1900年开始算起 */

     int tm_wday; 

/* 星期X: [0 - 6] */

     int tm_yday; 

/* 一年中第X天: [0 - 365] */

     int tm_isdst;

/* 夏时制标记: <0, 0, >0 */

};                

 

夏时值,即:日光节约时制(Daylight Saving Time)

clock_t

clock_t clock(void);

返回程序自开始执行到目前为止所占用的处理机时间。如果处理机时间不可使用,那么返回-1。clock()/CLOCKS_PER_SEC是以秒为单位表示的时间。

其他

Unix

在Unix下,与time()相比,

int gettimeofday(struct timeval *tv, struct timezone *tz);

可以获得更高的分辨率(最高为微秒)。

QThread::sleep()在unix下的实现使用该函数。

python的time模块中的time()/sleep()也使用该函数。

locale

函数strftime()生成的字符串受locale中的LC_TIME影响


作者:dbzhang800 发表于2011-10-21 23:17:24 原文链接
阅读:116 评论:0 查看评论

相关 [时间 日期 函数] 推荐:

C、C++时间与日期函数

- lyxint - 1+1=2
由于自己实际工作学习中没怎么用时间和日期的函数,在看Unix环境高级编程6.10节和Python的time模块时,总感觉这些东西总是连不成串. 翻翻C标准(C++中的东西我看不懂),相关的也就是time.h这个东西了. 暂时抛开和clock相关的东西. 只看字面上和time直接相关的东西. 该函数返回从某个时间点(epoch)到现在为止所经过的秒数.

MySQL:日期函数、时间函数总结(MySQL 5.X)

- - ITeye博客
一、MySQL 获得当前日期时间 函数. 1.1 获得当前日期+时间(date + time)函数:now(). 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:. 这些日期时间函数,都等同于 now(). 鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数.

Sql 日期格式化函数大全

- Xin - 博客园-首页原创精华区
Sql Server 日期格式化函数大全. 作者: 啊峰 发表于 2011-08-25 00:04 原文链接. 评论: 0 查看评论 发表评论. · PC巨头的转型之旅(2011-08-24 23:10). · Facebook今年底有望成美国第二大视频网站(2011-08-24 22:52). · 15个基于jQuery开发的网站,非常有创意.

Java计算日期和时间差

- - BlogJava_首页
这篇文章将使用两个例子计算两个日期的时间差.  计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算两个微秒时间差. 1s秒 = 1000ms毫秒 1min分种 = 60s秒 1hours小时 = 60min分钟 1day天 = 24hours小时.             //毫秒ms.

Joda Time v2.0 发布,强大的Java日期时间库

- Jet - ITeye资讯频道
   Joda Time v2.0发布了.    Joda Time是一个强大、易用、高效的日期和时间库,它可以作为 JDK 日期/时间库的替代选择. 无论是计算日期、打印日期,或是解析日期,Joda 都将是非常实用、便捷的工具.    Joda-Time 令时间和日期值变得易于管理、操作和理解. 事实上,易于使用是 Joda 的主要设计目标.

js时间戳怎么转成日期格式

- - CSDN博客推荐文章
js时间戳怎么转成日期格式. 这个在主群里有朋友§☆釺哖蟲...o问js时间戳怎么转成日期格式 ,他的问题是这样的. /Date(1354116249000)/ 这样的格式怎么转成时间格式. 这是从C#的Datatime格式通过Json传到Js里面的,. js需要把时间戳转为为普通格式,一般的情况下可能用不到的,.

Java 8新的时间日期库的20个使用示例

- - Java译站
除了 lambda表达式, stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API. Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及 将SimpleDateFormat实现成非线程安全的.

Springboot 关于日期时间格式化处理方式总结

- - 掘金后端
项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是SpringMVC收到参数后总报错,为了配置全局时间类型转换,尝试了如下处理方式. 注:本文基于Springboot2.x测试,如果无法生效可能是spring版本较低导致的. PS:如果你的Controller中的LocalDate类型的参数啥注解(RequestParam、PathVariable等)都没加,也是会出错的,因为默认情况下,解析这种参数是使用.

[原创]两行代码解决javascript按指定格式显示日期时间

- We_Get - 博客园-首页原创精华区
/// 待显示的日期时间,例如new Date(). /// 需要显示的格式,例如yyyy-MM-dd hh:mm:ss. 我曾为解决该问题花了不少时间,主要是网络上找到的代码要么非常烦琐,要么不能通用或格式只能固定几个,所以我专门对这个问题进行了研究,最终优化到只有2行代码,非常精简.

为了满足项目上线日期要求,我该怎么告诉我的团队工作更多时间?

- - 互联网的一些事-关注互联网产品管理,交流产品设计、用户体验心得
  原文出处: Quora 译文出处: little lin.   最近在Quora 上看到了一个有趣的问题,What is the best way to communicate to a software development team that they need to work more hours to meet a launch date.