当前位置: 首页 > 编程笔记 >

C++获取本地时间常见方法汇总

施飞昂
2023-03-14
本文向大家介绍C++获取本地时间常见方法汇总,包括了C++获取本地时间常见方法汇总的使用技巧和注意事项,需要的朋友参考一下

1.跨平台方法

1.1方法一:手动暴力法

#include <iostream>
using namespace std;
#include <time.h>

time_t t = time(NULL);
struct tm* stime=localtime(&t);
char tmp[32]={NULL};
sprintf(tmp, "%04d-%02d-%02d %02d:%02d:%02d",1900+stime->tm_year,1+stime->tm_mon,stime->tm_mday, stime->tm_hour,stime->tm_min,stime->tm_sec);
cout<<tmp<<endl;

输出结果:

2015-04-02 23:12:56

1.2方法二:投机取巧法

#include <iostream>
using namespace std;
#include <time.h>

time_t t = time(0); 
char tmp[32]={NULL};
strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&t)); 
cout<<tmp<<endl;

输出结果:

2015-04-02 23:12:56

1.3方法三:简获日历时间法

#include <iostream>
using namespace std;
#include <time.h>
#include <string>

time_t tm;
time(&tm);
char tmp[128]={NULL};
strcpy(tmp,ctime(&tm));
//或者
//struct tm* stime=localtime(&tm);
//strcpy(tmp,asctime(stime));
cout<<tmp<<endl;

输出结果:

Fri Aug 14 23:19:42 2015

2.Windows平台获取时间

#include <iostream>
using namespace std;
#include <time.h>
#include <windows.h>

SYSTEMTIME sys; 
GetLocalTime(&sys);
char tmp[64]={NULL};
sprintf(tmp,"%4d-%02d-%02d %02d:%02d:%02d ms:%03d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds); 
cout<<tmp<<endl;

输出结果:

2015-08-14 23:41:56 ms:354

3.Unix平台获取时间

#include <sys/time.h> 
#include <unistd.h>

struct timeval now_time;
gettimeofday(&now_time, NULL);
time_t tt = now_time.tv_sec;
tm *temp = localtime(&tt);
char time_str[32]={NULL};
sprintf(time_str,"%04d-%02d-%02d%02d:%02d:%02d",temp->tm_year+ 1900,temp->tm_mon+1,temp->tm_mday,temp->tm_hour,temp->tm_min, temp->tm_sec);
cout<<tmp<<endl;

输出时间:

2015-08-14 23:41:56

4.需知知识点

(1)UTC (Coordinated Universal Time):协调世界时,又称世界标准时间。曾由格林威治平均时间(Greenwich Mean Time,GMT)提供,现在由原子钟提供。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。

(2)Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间,由time()函数获取。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。

(3)Epoch指的是一个特定的时间点:1970-01-01 00:00:00 UTC,即Unix 时间戳。

(4)clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。
在VC++的time.h文件中,我们可以找到相关的定义:

#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif

#define CLOCKS_PER_SEC ((clock_t)1000)

clock_t clock( void );

这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计
时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。

//获取逝去时间
clock_t start, finish;
start=clock();
…
finish=clock();

//逝去多少秒
long duration=(finish- start)/ CLOCKS_PER_SEC;

(5) time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的年月日时分秒分开显示的时间格式tm:

struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);

其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么我用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时。

(6)分解时间就是以年、月、日、时、分、秒等分量保存的时间结构,在C/C++中是tm结构。我们可以使用mktime()函数将用tm结构表示的时间转化为日历时间。其函数原型如下:

time_t mktime(struct tm * timeptr);

该函数与gmtime和localtime函数具有相反的作用。

以上就是C++获取本地时间常见方法汇总的详细内容,更多关于C++ 获取本地时间的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 本文向大家介绍JavaScript中常见获取元素的方法汇总,包括了JavaScript中常见获取元素的方法汇总的使用技巧和注意事项,需要的朋友参考一下 常见的获取元素的方法有3种,分别是通过元素ID、通过标签名字和通过类名字来获取。 getElementById DOM提供了一个名为getElementById的方法,这个方法将返回一个与之对应id属性的节点对象。使用的时候请注意区分大小写。 它是

  • 本文向大家介绍VC++ 获取系统时间的方法汇总,包括了VC++ 获取系统时间的方法汇总的使用技巧和注意事项,需要的朋友参考一下 1.使用CTime类(获取系统当前时间,精确到秒) a,从CTimet中提取年月日时分秒 b,计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下: c,获得当前日期和时间,并可以转化为CString 2.使用GetLocalTime:Windows API

  • 本文向大家介绍C++常见获取随机数的方法小结,包括了C++常见获取随机数的方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++常见获取随机数的方法。分享给大家供大家参考,具体如下: 方法一: 使用 rand 函数可以获取,如下。 随机数大小是在0到RAND_MAX,值为2147483647,它是在stdlib中定义的,如果我们希望在某个范围内,可以使用 % 结合 / 来实现。 但

  • 本文向大家介绍ASP.NET操作各类时间段获取方法汇总,包括了ASP.NET操作各类时间段获取方法汇总的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET操作各类时间段获取方法,分享给大家供大家参考。具体如下: 希望本文所述对大家的asp.net程序设计有所帮助。

  • 本文向大家介绍C#获取根目录实现方法汇总,包括了C#获取根目录实现方法汇总的使用技巧和注意事项,需要的朋友参考一下 1.控制台应用程序 运行结果: 2.winform应用程序 运行结果: 3.MVC和WebForm项目 通过Server.MapPath("/")获取根目录 4.WebApi项目 WebApi Core的根目录获取:HttpRuntime.AppDomainAppPath 补充:We

  • 本文向大家介绍C++获取本机MAC,IP,MASK地址的方法,包括了C++获取本机MAC,IP,MASK地址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,分享给大家供大家参考。具体方法如下: 希望本文所述对大家的C++程序设计有所帮助。