跨平台方法

方法一:手动暴力法

#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

方法二:投机取巧法

#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

方法三:简获日历时间法

#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

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

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

需知知识点

(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函数具有相反的作用。

參考文献

[1] http://blog.sina.com.cn/s/blog_48f3622d010008zx.html

C/C++获取本地时间常见方法的更多相关文章

  1. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  2. JS简单获取当前日期时间的方法(yyyy-MM-dd hh:mm:ss)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  3. linux c获取本地时间

    在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: #ifndef _TM_DEFINED struct tm { int tm_sec; /* 秒–取值区间 ...

  4. JavaScript—获取本地时间以12小时制显示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Python实例讲解 -- 获取本地时间日期(日期计算)

    1. 显示当前日期: print time.strftime('%Y-%m-%d %A %X %Z',time.localtime(time.time())) 或者 你也可以用: print list ...

  6. C# 如何获取日期时间各种方法

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2019-01-09).时间(16:02:12).日期+时间(2019-01-09 16 ...

  7. 使用 jquery 获取当前时间的方法

    我们在写一些效果时,经常要用到 jquery 获取当前时间,但是jquery 目前并没有提供直接获取当前时间的 api 或者函数,所以我们还是得用原生的 javascript 时间对象 Date 来获 ...

  8. [置顶] 获取系统时间的方法--linux

    一. localtime 函数获取(年/月/日/时/分/秒)数值. 1.感性认识 #include<time.h>     //C语言的头文件 #include<stdio.h> ...

  9. iOS获取本地时间

    NSDate *currentDate = [NSDate date];//获取当前时间,日期 NSDateFormatter *dateFormatter = [[NSDateFormatter a ...

随机推荐

  1. thinkphp5项目--个人博客(七)

    thinkphp5项目--个人博客(七) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  2. 洛谷P1137 旅行计划 解题报告(拓扑排序+DP)

    我看了一下其他大佬的题解,大部分都是拓扑排序加上DP.那么我想有的人是不明白为什么这么做的,拓扑排序有什么性质使得可以DP呢?下面我就提一下. 对一个有向无环图(Directed Acyclic Gr ...

  3. SFTP的使用

    SFTP的使用: 1.项目中需要引入jar包,下载地址:https://sourceforge.net/projects/jsch/files/jsch.jar/ 2.需要下载SFTP服务器,下载地址 ...

  4. 修改host方法

    打开路径 C:\Windows\System32\drivers\etc 将hosts文件拷贝出来修改之后放回去覆盖即可 以下是一个例子,想得到ip可以先ping一下那个域名. 左边是ip,右边是域名 ...

  5. js中字符串下划线转为驼峰

    function camelCase(string){ // Support: IE9-11+ return string.replace( /-([a-z])/g, function( all, l ...

  6. 消除textarea的空格de长度值

    在项目中因为用到文本域textarea输入textarea的长度总是显示 25 那是还怀疑textarea自带有value长度? placeholder属性的长度? 那时候想到类似:ul无序列表li元 ...

  7. Python 生成器 Generator 和迭代器 Iterator

    #最近一周刚开始接触python,基本的语法,和使用特性和Java差别还是蛮大的. 今天接触到Python的迭代器和生成器有点不是很明白,所以搜索了先关资料整理了一些自己的理解和心得 简述(Profi ...

  8. 【Codeforces Round #465 (Div. 2) C】Fifa and Fafa

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 这个x2,y2和圆心(x1,y1)相连.形成的直线和圆交于点(x3,y3) 则(x2,y2)和(x3,y3)的中点就是所求圆的圆心. ...

  9. Nutch1.6学习笔记

    回 到 目 录 暑假每天傍晚或晚上更新 伪恋赛高 这里提供nutch1.6的src下载: apache-nutch-1.6-src.zip 115网盘礼包码:5lbcymlo6u76http://11 ...

  10. Android输入法扩展之远程输入法

    近年来,互联网电视開始火热,乐视TV,小米TV,近期爱奇艺也在大肆的招人做爱奇艺电视.当然还有更被关注的苹果电视.事实上,这个趋势非常正常,也非常合理,传统单纯的接收电视节目的电视已经太传统了.是该被 ...