Linux下关于时间的操作
来源:互联网 发布:c语言qsort函数 编辑:程序博客网 时间:2024/05/22 03:24
C、C++时间与日期函数
- 由于自己实际工作学习中没怎么用时间和日期的函数,在看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 2011Fri Oct 21 22:24:34 2011
不过这个东西太死板了吧,想自定义字符串怎么办?
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
和printf类似,有一大堆转换符可用,这样一来,我们可以得到
FriFriday2011-10-2110: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影响
- Linux下关于时间的操作
- linux 下关于用户的操作
- Linux下关于时间概念的C语言编程
- Linux下关于时间概念的C语言编程
- Linux下关于时间概念的C语言编程
- Linux下关于RPM软件包的操作命令
- Linux下关于文件&&目录操作的命令小结
- 0818-Linux下关于文件的一些操作
- Linux 下关于文本文件操作使用的案例
- linux下关于文件操作记录
- TMemoryStream下关于bye数组的操作
- python 下关于文件操作的文章
- Linux下关于内存的查看
- Linux下关于网络设置的文件
- Linux下关于热插拔硬盘的指令
- Linux下关于热插拔硬盘的指令
- Linux下关于NFS的配置步骤
- Linux下关于环境变量的一些心得
- 20个对前端开发人员有用的文档和指南
- 企业即时通讯系统十大排名
- 公司-->超级链接跳转和表单提交,删除的表单提交和删除失败的提示信息
- ItemDecoration详解以及用ItemDecoration实现按字母排序列表
- java常见的四种访问权限
- Linux下关于时间的操作
- 快速排序
- 5-2 派生类的构造函数
- 整合IIS与单个tomcat(共用80端口) -- isapi_redirect篇
- 一个目录下的日志 按照日期统计每日日质量大小
- springmvc(3)----参数绑定
- 那些关于“程序猿”的经典和笑话,据说一般人不会懂
- JAVA正则表达式语法及应用总结
- Android 拍照,选取照片,截取,显示