导读

在平时编程中有时需要获取当前的时间或者日期,然而不同的平台不同的场景下,有时使用的API也不尽相同。一般来说,C/C++中关于时间的标准库函数在不同的平台的都可以使用,可一些与平台相关的函数就只能在特定的平台上使用了。

本文将记录C++ 中与时间相关的日期相关的函数 和 相关的数据类型。同时对不同系统平台的API进行对比,区别以加深相关知识的记忆。


目录
  1. C++当中时间与日期相关的函数与类型
  2. Windows 平台的时间函数
  3. Linux 平台的时间函数
  4. 其他

参考:C++ API 在线

1、C++中 时间与日期相关的函数与类型

C++ 支持两种类型的时间操作:

  • chrono 库,一个多样的函数集合,可以多样的、不同的精度来表示时间。 (e.g. std::chrono::time_point).(C11后的标准,有兴趣可以进一步了解
  • C类型 的时间和日期库。(e.g. std::time)

在这里主要记录常用的C类型的 时间和日期库。

函数:

时间操作
头文件: <time.h>
(函数)计算2个时间的差值 (参数为2个time_t数据,arg1-arg2,返回值为double)
(函数)返回自格林威治1970.01.01 到现在的系统日历时间 (struct tm)
(函数)返回自程序启动以来的 原生处理器时钟时间 ( raw processor clock time) 
(since C11)
(函数)返回基于一个给定 time base (如 TIME_UTC) 的日历时间 (struct timespec)
格式转换
头文件: <time.h>
(函数)将 tm 对象转为文本表示(通过Www Mmm dd hh:mm:ss yyyy定制) 
(C11)
(函数)将 time_t 对象转为文本表示 
(函数)将 tm 对象转为 自定义 的文本表示 
头文件: <wchar.h>
(C95)
(函数)将 tm 对象转换为 自定义的 宽字节 字符串文本 
头文件: <time.h>
(函数)time_t 转为 tm (UTC 时间) 
(函数) time_t 转为 tm (本地时间) 
(函数) tm 转为time_t (自格林威治19700101) 

常量:

头文件: <time.h>
每秒的处理器时钟数  
(macro constant)

类型:

头文件 <time.h>
(struct)日历时间类型
(typedef)日历时间 since epoch type 
(typedef)处理器时间 since era type 
(since C11)

(struct)包括秒和纳秒的 时间

[可通过 函数int clock_gettime(clockid_t clock_id, struct timespec *tp);获得,如 clock_gettime(CLOCK_REALTIME, &t)]

函数和类型参考 这里

函数关系图:

2、Windows 平台的时间函数

微软官方文档:时间函数

函数常用的有:(头文件:windows.h)

GetSystemTime   获得UTC(等于GMT)时间

GetLocalTime      获得系统本地时间

类型

SYSTEMTIME     

typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;

SYSTEMTIME 成员

例子:

#include <windows.h>
#include <stdio.h> void main()
{
SYSTEMTIME st, lt; GetSystemTime(&st);
GetLocalTime(&lt); printf("The system time is: %02d:%02d\n", st.wHour, st.wMinute);
printf("The local time is: %02d:%02d\n", lt.wHour, lt.wMinute);
}

运行结果:

The system time is: :
The local time is: :
3、Linux 平台的时间函数

函数:

gettimeofday      头文件 <sys/time.h> 得到 timeval(精确到微秒)

            接口:int gettimeofday(struct timeval *restrict tp, void *restrict tzp);(第二个形参是基于平台实现的,使用的时候最好用NULL)

类型:

timeval

struct timeval{
time_t tv_sec; /*** second ***/
susecond_t tv_usec; /*** microsecond 微妙***/
}

实例:

#include <stdio.h>
#include <sys/time.h> int main() {
struct timeval start, end; gettimeofday( &start, NULL );
sleep();
gettimeofday( &end, NULL ); //求出两次时间的差值,单位为us
int timeuse = * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
printf("time: %d us\n", timeuse);
return ;
}

gettimeofday 实例

附:内核时间

内核有两个重要的全局变量:
unsigned long jiffies;
timeval xtime ;

jiffies 是记录着从电脑开机到现在总共的"时钟中断"的次数。
文件linux-2.6.24/kernel/timer.c  
void do_timer(unsigned long ticks)
{
    jiffies_64 += ticks;
    update_times(ticks);
}
xtime 是从cmos电路或rtc芯片中取得的时间,一般是从某一历史时刻开始到现在的时间。
这个就是所谓的"墙上时钟walltimer",通过它可计算得出操作系统需要的日期时间,它的精确度是微秒。

xtime第一次赋值是在系统启动时调用timekeeping_init或time_init进行的
再调用read_persistent_clock进一步调用get_rtc_time得到的

PS:在/proc/uptime里面的两个数字分别表示:   
the uptime of the system(seconds),
and the amount of time spent in idle process(seconds).

参考:这里  和 这里(Linux内核定时器和时间管理)

4、其他

 time_t 与 SYSTEMTIME 的转(Click Here)

关于CTime:(1)(2)(3)

C++ —— 时间与日期的更多相关文章

  1. Android随笔之——Android时间、日期相关类和方法

    今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...

  2. Lua库之时间和日期操作

    Lua库之时间和日期操作 (2010-02-07 18:41:20) 转载▼ os.time() <== 返回当前系统的日历时间os.date() <== 返回本地化的时间字符串,这里是& ...

  3. date 显示或设置系统时间和日期

    显示或设置系统时间和日期 date [options] [+format] date [options] [new date] date用来显示系统的时间和日期,超级用户可以使用date来更改系统时钟 ...

  4. java时间和日期类型

    在java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar,此外,在JDBC API中还提供了3个扩展类,java.UtilDate类的子类:java. ...

  5. iOS中的时间和日期

    怎么说?时间和日期不是了不起的属性.了不起的功能,但是,我们决不能够因此就“冷落”它. 一:怎么“搞到货”--如何获取时间.日期 //-=-==当前时间------默认显示“0时区”时间 NSDate ...

  6. Python 时间和日期模块的常用例子

    获取当前时间的两种方法 import datetime,time now = time.strftime("%Y-%m-%d %H:%M:%S") print now now = ...

  7. Java 对时间和日期的相关处理

    1. 获取当前系统时间和日期并格式化输出 import java.util.Date; import java.text.SimpleDateFormat; public class NowStrin ...

  8. PHP date 格式化一个本地时间/日期

    PHP date 格式化一个本地时间/日期 date (PHP 4, PHP 5) date — 格式化一个本地时间/日期 说明 string date ( string $format [, int ...

  9. java JDK8 学习笔记——第13章 时间与日期

    第十三章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 1.格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点之时.现在已经不作为标准时间使用. 2.世界时UT世界时 ...

  10. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. AdaBoost原理,算法实现

    前言: 当做重要决定时,大家可能综合考虑多个专家而不是一个人的意见.机器学习处理问题也是如此,这就是元算法背后的思路.元算法是对其他算法进行组合的一种方式,前几天看了一个称作adaboost方法的介绍 ...

  2. 桌面浏览器实现滑动翻页效果(Swiper)

    还是那个号称很炫的B/S展示软件,在液晶屏上展示需要有滑动翻页的效果(在同一页面滑动切换内容,不是切换页面),最后确定使用功能很强大的Swiper类库. 具体优点可参考:http://www.chin ...

  3. ASP.Net定时任务执行

    原料: System.Timers.Timer():通过.NET  Thread  Pool实现的,轻量,计时精确,对应用程序.消息没有特别的要求:缺点是不支持直接的拖放,需要手工编码. Timer的 ...

  4. 利用jquery进行ajax提交表单和附带的数据

    1.获取表单数据: $form.serialize() 2.附带数据:input[status]=1 3.构造url链接:url = $form.attr('action') + '?input[st ...

  5. mysql备份sql,脚本

    MySQL 安装位置:/usr/local/mysq 论坛数据库名称为:bbs MySQL root 密码:123456 数据库备份目的地:/var/db_backup/ #! /bin/bash / ...

  6. Linux下安装gcc 、g++ 、gfortran编译器

    一.ubuntu下gcc/g++/gfortran的安装 1.安装 (1).gcc ubuntu下自带gcc编译器.可以通过“gcc -v”命令来查看是否安装. (2).g++ 安装g++编译器,可以 ...

  7. JavaScript学习心得(一)

    一Javascript简介 JavaScript是一种面向对象.弱类型的脚本语言!面向对象编程语言(OOP)意味着你用的几乎所有变量都是对象,对象是一种特殊的变量类型,有自己的子变量(称为属性)及函数 ...

  8. Dalvik虚拟机进程和线程的创建过程分析

    从前面Dalvik虚拟机的运行过程分析一文可以知道,Dalvik虚拟机除了可以执行Java代码之外,还可以执行Native代码,也就是C/C++函数. 这些C/C++函数在执行的过程中,又可以通过本地 ...

  9. core文件找不到了

    开始以为是core文件太大,设置ulimit -c unlimited  以后,再次访问,显示 ./a.out Segmentation fault (core dumped) 但是却找不到这个文件的 ...

  10. Sql Server2000,2005,2008各版本主要区别

    Emerson回来之后,在过程中遇到的一些问题,再次做一些整理,包括本篇的Sql Server各版本之间的区别和另一篇数据库函数. (博文内容来自网络) 数据类型 SQL Server 2008 数据 ...