首页 > 编程语言 >c/c++ 时间函数

c/c++ 时间函数

时间:2024-05-28 13:55:22浏览次数:30  
标签:std 函数 clock c++ tm 时间 time now

 

1 time()

头文件:time.h

函数原型:time_t time(time_t * timer)

功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数(long),其值表示从CUT

(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成

struct tm类型,该类型的各数据成员分别表示年月日时分秒。

举例:

//获取当前时间

复制代码
time_t nowtime;
struct tm *timeinfo;
time( &nowtime );//或者nowtime=time(NULL);
timeinfo = localtime( &nowtime );

int year, month, day;
year = timeinfo->tm_year + 1900;
month = timeinfo->tm_mon + 1;
day = timeinfo->tm_mday;
printf("%d :%d :%d\n", year, month, day);

char timE [80];

strftime ( timE,80,"Data:\n%Y-%m-%d \nTime:\n%I:%M:%S\n",timeinfo);

printf ("%s\n", timE);
复制代码

 

说明:struct tm
{
int tm_sec;  //秒,0-59
int tm_min;  //分,0-59
int tm_hour; //时,0-23
int tm_mday; //天数,1-31
int tm_mon;  //月数,0-11输出时要加1
int tm_year; //自1900到当前的年数
int tm_wday; //自星期日的天数0-6
int tm_yday; //自1月1日起的天数,0-365
int tm_isdst;//是否采用夏时制,采用为正数
} ;
strftime()函数将时间格式化为我们想要的格式,原型如下:

size_t strftime(

 

  char *strDest,

 

  size_t maxsize,

 

  const char *format,

 

  const struct tm *timeptr

 

  );

格式命令列在下面,它们是区分大小写的

    %a 星期几的简写 Eg:Tue

 

  %A 星期几的全称 Eg: Tuesday

 

  %b 月分的简写

 

  %B 月份的全称

 

  %c 标准的日期的时间串

 

  %C 年份的后两位数字

 

  %d 十进制表示的每月的第几天 (范围为 00 至 31)。

 

  %D 月/天/年

 

  %e 在两字符域中,十进制表示的每月的第几天

 

  %F 年-月-日

 

  %g 年份的后两位数字,使用基于周的年

 

  %G 年分,使用基于周的年

 

  %h 简写的月份名

 

  %H 24小时制的小时(范围为 00 至 23)。 

 

  %I 12小时制的小时  (范围为 01 至 12)。

 

  %j 十进制表示的每年的第几天  (范围为 001 至 366)。

 

  %m 十进制表示的月份

 

  %M 十时制表示的分钟数

 

  %n 新行符

 

  %p 本地的AM或PM的等价显示

 

  %r 12小时的时间

 

  %R 显示小时和分钟:hh:mm

 

  %S 十进制的秒数

 

  %t 水平制表符

 

  %T 显示时分秒:hh:mm:ss

 

  %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)

 

  %U 第年的第几周,把星期日作为第一天(值从0到53)

 

  %V 每年的第几周,使用基于周的年

 

  %w 十进制表示的星期几(值从0到6,星期天为0)

 

  %W 每年的第几周,把星期一做为第一天(值从0到53)

 

  %x 标准的日期串

 

  %X 标准的时间串

 

  %y 不带世纪的十进制年份(值从0到99)

 

  %Y 带世纪部分的十制年份

 

  %z,%Z 时区名称,如果不能得到时区名称则返回空字符。

 

  %% 百分号

 

2 clock()

头文件:time.h

函数原型:clock_t clock(void);  clock_t其实就是long,即长整形

功能:函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,vc6.0和c++builder6.0中该常量是1000,因此一个计时单元是1毫秒。

举例:

复制代码
 long i = 10000000L;
 clock_t start, finish;
 double duration;  //测量一个事件持续的时间
 printf( "Time to do %ld empty loops is ", i );
 start = clock();
 while( i-- ) ;
 finish = clock();
 duration = (double)(finish - start)/ CLOCKS_PER_SEC;
 printf( "%f seconds\n", duration );
复制代码

 

WINDOWS API

3 GetTickCount

库文件:kernl32.dll

头文件:C/C++头文件winbase.h ;windows程序设计中可以使用头文件windows.h

函数原型:DWORD GetTickCount(void);

功能:返回从操作系统启动到现在所经过的毫秒数,它的返回值是DWORD

举例:

DWORD dwStart = GetTickCount();
//这里运行你的程序代码
DWORD dwEnd = GetTickCount();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位
这个函数只精确到55ms,1个tick就是55ms。

 

 

4 timeGetTime 

库文件:winmm.lib,引用该库文件#pragma    comment(lib,"winmm.lib")

函数原型:DWORD timeGetTime(VOID);

功能:返回从操作系统启动到现在所经过的毫秒数,它的返回值是DWORD,精确度比GetTickCount高(>=5ms)

举例:

复制代码
 #pragma    comment(lib,"winmm.lib")

 j=10000000;
 DWORD dwStart1 = timeGetTime();
 while(j--);
 DWORD dwEnd1 = timeGetTime();
 cout<<(dwEnd1-dwStart1)<<endl;
复制代码

 

5 GetLocalTime

头文件:windows.h

函数原型:VOID GetLocalTime(

  LPSYSTEMTIME lpSystemTime       //address of system times structure

  );

lpSystemTime: 指向一个用户自定义包含日期和时间信息的类型为 SYSTEMTIME 的变量,该变量用来保存函数获取的时间信息

功能:获取当地的当前系统日期和时间

SYSTEMTIME结构体

  typedef struct _SYSTEMTIME

  {

  WORD wYear;//年

  WORD wMonth;//月

  WORD wDayOfWeek;//星期,0为星期日,1为星期一,2为星期二……

  WORD wDay;//日

  WORD wHour;//时

  WORD wMinute;//分

  WORD wSecond;//秒

  WORD wMilliseconds;//毫秒

  }SYSTEMTIME,*PSYSTEMTIME;

举例:

 

SYSTEMTIME time;
 GetLocalTime(&time);
 printf("当前时间为:-:-:-\n",time.wHour,time.wMinute,time.wSecond);

 

6 QueryPerformanceCounter

头文件:windows.h

函数原型:BOOL QueryPerformanceCounter(LARGE_INTEGER *ipPerformanceCount);//参数指向计数器的值,如果安装的硬件不支持高精度计时器,该参数将返回0

函数返回值:硬件不支持高精度计时器,函数返回0,否则返回非0

功能:得到高精度计时器的值(如果存在这样的计时器),精度可以达到微秒级别

辅助函数QueryPerformanceFrequency

函数原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

函数返回值:硬件不支持高精度计时器,函数返回0,否则返回非0

功能:返回硬件支持的高精度计数器的频率(每秒嘀哒声的个数)

typeef union _ LARGE_INTEGER
  {
   struct
   {
   DWORD LowPart;
   LONG HighPart;
   };
   LONGLONG QuadPart;
  } LARGE_INTEGER;
举例:

 

复制代码
j=100000;
 LARGE_INTEGER litmp;
 LONGLONG qt1,qt2;
 double dft,dff,dfm;
 QueryPerformanceFrequency(&litmp);//获得时钟频率
 dff=(double)litmp.QuadPart;
 QueryPerformanceCounter(&litmp);//获得初始值
 qt1=litmp.QuadPart;
 while(j--);
 QueryPerformanceCounter(&litmp);//获得终止值
 qt2=litmp.QuadPart;
 dfm=(double)(qt2-qt1);
 dft=dfm*1000000/dff;//获得对应的时间值,微秒为单位
 cout<<dft<<endl;
复制代码

 【版权声明】转载请注明出处 http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022021.html

========================

在 C++ 中,处理时间和日期的函数有很多,主要分布在标准库 <ctime><chrono> 中。下面详细介绍一些常用的时间函数和类。

<ctime>

<ctime> 是 C 标准库的头文件,提供了处理日期和时间的函数。常用的函数和类型包括:

  1. time_t:时间类型,表示从 Epoch(1970 年 1 月 1 日 00:00:00 UTC)起经过的秒数。

    cpp #include <ctime> time_t now = time(0); // 获取当前时间
  2. tm:结构体,表示日期和时间的结构。

    cpp struct tm { int tm_sec; // 秒,范围从 0 到 59 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; // 一星期中的第几天,范围从 0 到 6 int tm_yday; // 一年中的第几天,范围从 0 到 365 int tm_isdst; // 夏令时 };
  3. time():返回当前的日历时间。

    cpp time_t now = time(0); // 获取当前时间
  4. localtime():将 time_t 转换为表示本地时间的 tm 结构。

    cpp struct tm *ltm = localtime(&now);
  5. gmtime():将 time_t 转换为表示 UTC 时间的 tm 结构。

    cpp struct tm *gmt = gmtime(&now);
  6. strftime():格式化时间输出。

    cpp char buffer[80]; strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", ltm); printf("Formatted time: %s\n", buffer);

<chrono>

<chrono> 是 C++11 引入的头文件,提供了更加现代和精确的时间处理功能。主要类和函数包括:

  1. duration:表示一段时间,可以用不同的精度表示(如秒、毫秒、微秒等)。

    cpp #include <chrono> std::chrono::seconds sec(10); // 10 秒 std::chrono::milliseconds ms(100); // 100 毫秒
  2. time_point:表示一个时间点,通常与特定时钟(如系统时钟)关联。

    cpp auto now = std::chrono::system_clock::now(); // 获取当前时间点
  3. system_clock:表示系统时钟。

    cpp auto now = std::chrono::system_clock::now(); // 获取当前时间点 time_t now_c = std::chrono::system_clock::to_time_t(now); // 转换为 time_t 类型
  4. steady_clock:表示单调时钟,适合用于测量时间间隔,因为它不会被系统时间的调整所影响。

    cpp auto start = std::chrono::steady_clock::now(); // ... 一些操作 ... auto end = std::chrono::steady_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); std::cout << "Operation took " << duration.count() << " milliseconds." << std::endl;

示例代码

下面是一个结合使用 <ctime><chrono> 的示例:

cpp #include <iostream> #include <ctime> #include <chrono> int main() { // 使用 <ctime> 获取和格式化当前时间 time_t now = time(0); struct tm *ltm = localtime(&now); char buffer[80]; strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", ltm); std::cout << "Current local time: " << buffer << std::endl; // 使用 <chrono> 进行精确的时间测量 auto start = std::chrono::steady_clock::now(); // ... 模拟一些操作 ... std::this_thread::sleep_for(std::chrono::seconds(1)); // 休眠 1 秒 auto end = std::chrono::steady_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); std::cout << "Operation took " << duration.count() << " milliseconds." << std::endl; return 0; }

这个示例展示了如何使用 <ctime> 获取和格式化当前时间,以及如何使用 <chrono> 进行精确的时间测量。

 

====================

 

参数:

https://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022021.html

标签:std,函数,clock,c++,tm,时间,time,now
From: https://www.cnblogs.com/rebrobot/p/18217833

相关文章

  • 图像处理之计算物体的方向(C++)
    图像处理之计算物体的方向(C++)文章目录图像处理之计算物体的方向(C++)前言一、PCA获取物体主要方向1.原理2.代码实现二、Hu矩获取物体主要方向1.原理2.代码实现总结前言在图像处理中,物体的方向(倾斜角度)计算的应用非常常见,总结如下方法:PCA获得物体的主要方向以及Hu......
  • 基于C++的二叉树的创建与遍历(免费提供源码)
    下载地址如下:上传明细-CSDN创作中心项目介绍背景二叉树作为一种常见的数据结构,在计算机科学和编程实践中占有重要地位。它广泛应用于搜索算法、排序算法、表达式解析、符号表以及各种数据库索引结构中。因此,掌握二叉树的创建和遍历是计算机科学领域的一项基本技能。本项目......
  • C++中定义和声明的区别
     直接上例子在类里面声明(这里以静态数据成员和静态成员函数为例)classMyClass{public:staticintstaticDataMember;//静态数据成员的声明staticvoidstaticFunction();//静态成员函数的声明//其他成员...};在cpp文件中定义 静态成员的声明......
  • shell编程之循环语句与函数
    一:for循环语句1:for循环语句的结构for变量名in取值列表do命令序列done注意:for循环语句需要有一个取值列表备注:for语句的执行流程:首先将列表中的第一个取值赋给变量,并执行do…done循环体中的命令序列;然后将列表中的第二个取值赋给变量,并执行循环体中的命令......
  • Shell编程循环语句与函数
    Shell编程之循环语句与函数目录1.1for循环语句1.1.1for语句的结构1.1.2for语句应用示例1.2while循环语句1.3until循环语句1.3.1until语句的结构2.1Shell函数2.1函数应用示例2.2函数的作用范围2.3函数的参数2.4递归函数3.1Shell数组3.2Shell脚本测试一、循......
  • 【c++基础(三)】类和对象中--构造和析构函数
    1.前言本章重点本篇文章着重讲解类中的两个默认函数,分别为:构造函数,析构函数这是c++六个默认成员函数中的两个(其他四个在后面章节讲解) 我们平时在写基础的数据机构时,例如栈和队列如果自己没有注意没有进行初始化,就有可能导致出错,同理,在写完代码后,忘记销毁开辟好......
  • 10 函数的应用:函数递归
    目录一、什么是递归(一)概念(二)递归的思想二、递归的条件三、递归的举例(一)分析与代码的实现四、递归与迭代(一)递归的缺陷(二)迭代(三)举例体现递归与迭代的区别五、有意思的点(一)递推的写法(二)拓展学习1、青蛙跳台问题2、汉诺塔问题(儿童益智游戏)一、什么是递归(一)概......
  • c++函数
    哈喽大家好,我是@菜就多练,输不起,就别玩,今天我来和大家分享函数函数就是在主函数上方的位置写,但也可以在下面写,常见函数类型有intdoubleboolstringchar.......不同函数类型它们的用法也不同,有判断的(bool),有计算的(intlonglong double),还有字符串的(charstring)等等等等那......
  • c++ 类型转换
     ========在C++中,类型转换(typeconversion)是将一个数据类型的变量转换为另一个数据类型的变量的过程。类型转换可以分为隐式转换(implicitconversion)和显式转换(explicitconversion)。下面详细介绍C++中的类型转换方式。隐式转换隐式转换也称为自动类型转换,是由编译器自动......
  • 2、补0函数
    补0函数1、FORMAT函数SELECTFORMAT(你的数字列,'0000000000');--这里的0的数量应该与你需要的位数相对应2、RIGHT和REPLICATE函数SELECTRIGHT(REPLICATE('0',你想要的数字位数)+CAST(你的数字列ASVARCHAR(MAX)),你想要的数字位数);3、例如,如果你有一个数字1,并且......