C/C++读取时间的方法

摘要:
本文介绍C/C++下获取日历时间的方法,区别于JAVA语言的方便,C/C++标准库好像并没有一次性得到具有可读性的HH:MM:SS的方法,本文介绍常用的三步法得出具有可读性的时间,并且介绍了纳秒和微秒的时间获取。

【摘要】本文介绍C/C++下获取日历时间的方法,区别于JAVA语言的方便,C/C++标准库好像并没有一次性得到具有可读性的HH:MM:SS的方法,本文介绍常用的三步法得出具有可读性的时间,并且介绍了纳秒和微秒的时间获取。

1、对于C语言,需包含的头文件:

1 #include <sys/time.h>

2、获取日期需要先获取日历时间,即1970年1月1日 00:00:00至今的秒数,在linux系统为time_t类型,其相当于1个long型。

然后将time_t转成tm结构体,tm结构体包括分、秒、时、天、月、年等数据。

使用clock_gettime获取日历时间代码如下:

#include <iostream>#include <sys/time.h>
using namespacestd;
intmain(){
    structtimespec tsp;
    clock_gettime(CLOCK_REALTIME,&tsp);

    struct tm *tmv = gmtime(&tsp.tv_sec);

    cout<<"日历时间:"<<tsp.tv_sec<<endl;
    cout<<"UTC中的秒:"<<tmv->tm_sec<<endl;
    cout<<"UTC中的时:"<<tmv->tm_hour<<endl;
}
结果:
日历时间:1475654852
UTC中的秒:32
UTC中的时:8

获取日历时间有如下三种:

time_t time(time_t *calptr);//精确到秒
int clock_gettime(clockid_t clock_id, struct timespec *tsp);//精确到纳秒
int gettimeofday(struct timeval *restrict tp, void *restrict tzp);//精确到微秒

3、如需获取毫秒和微秒,则不能使用以上的time_t和tm数据,在C/C++中提供了timespec和timeval两个结构供选择,其中timespec包括了time_t类型和纳秒,timeval包括了time_t类型和微秒类型。

#include <iostream>#include <sys/time.h>
using namespacestd;
intmain(){
    structtimespec tsp;
    structtimeval tvl;
    clock_gettime(CLOCK_REALTIME,&tsp);
    cout<<"timespec中的time_t类型(精度秒):"<<tsp.tv_sec<<endl;
    cout<<"timespec中的纳秒类型:"<<tsp.tv_nsec<<endl;

    gettimeofday(&tvl,NULL);
    cout<<"timeval中的time_t类型(精度秒)"<<tvl.tv_sec<<endl;
    cout<<"timeval中的微秒类型:"<<tvl.tv_usec<<endl;
}
结果:
timespec中的time_t类型(精度秒):1475654893
timespec中的纳秒类型:644958756
timeval中的time_t类型(精度秒)1475654893
timeval中的微秒类型:645036

4、用易于阅读的方式显示当前日期,C/C++提供strptime函数将time_t转成各类型的时间格式,但是它比较复杂,以下是一个例子:

#include <iostream>#include <sys/time.h>
using namespacestd;
intmain(){
    structtimespec tsp;
    clock_gettime(CLOCK_REALTIME,&tsp);
    char buf[64];
    struct tm *tmp = localtime(&tsp.tv_sec);
    if (strftime(buf,64,"date and time:%Y-%m-%d %H:%M:%S",tmp)==0){
        cout<<"buffer length is too small
";
    }
    else{
        cout<<buf<<endl;
    }
}
结果:
date and time:2016-10-05 16:02:45

5、C/C++中时间数据类型和时间函数的关系

C/C++读取时间的方法第1张

免责声明:文章转载自《C/C++读取时间的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇全网最详细的CentOS7里安装MySQL时出现No package mysql-server available错误的解决办法(图文详解)kcp-go源码解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android源码分析(一)-----如何快速掌握Android编译文件

一 : Android.mk文件概述 主要向编译系统指定相应的编译规则。会被解析一次或多次。因此尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析。这个文件的语法会把源代码组织成模块,每个模块属于下列类型之一: - APK程序:一般的Android程序,编译打包生成apk文件。 - JAVA库:java类库,编译打包生成jar包文件。...

Linux环境下proc的配置c/c++操作数据库简单示例

  在虚拟机上装了oracle11g数据库,原本想利用c/c++学习操作数据库.结果感觉摊上了一个大坑.从安装好oracle数据库到配置好proc的编译选项整整花了二天.但让我意识到自己自己几点薄弱:1.对Linux的命令和脚本的使用不够熟练.2.对Linux的个文件夹的作用不够了解;(打算下次补充一篇这样的总结博客.)3.英文还是很差劲的我.好入真题....

Android项目编译和使用C语言动态库(so库)

编译SO库 1、新建工程,建立jni目录用于放置c语言相关文件 2、编写Android.mk文件 1 LOCAL_PATH := $(call my-dir) 2 include $(CLEAR_VARS) 3 LOCAL_LDLIBS :=-llog 4 LOCAL_MODULE := PsamLib 5 LOCAL_SRC_FILES := P...

linux环境下java调用C/C++动态库(JNI技术:参数为指针与结构体)

一、JNI技术  JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植.  SUN公司发布的Java 本地接口(JNI)提供了将Java与C/C++、汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Java 代码能够与其它编程语言互相操作,包括创建本地方法、更新J...

qmake的使用(可设置c编译器flag参数)

本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso***还是先说一下当前的系统环境:Ubuntu 14.04 + Qt5.4如果没有安装过QT,可以安装下面几个qt软件 sudo apt-get install qt5-default qt5-doc-html qt5-qmake qt5-doc qt5-image-form...

QSS 样式表 (一)

在开发应用程序时,往往对界面的美观有一定的要求。Qt 引入了 QSS 机制,使得界面的美化工作变的轻轻松松。嗯,QSS听着有点耳熟。是的,QSS的语法和CSS类似。在此做些总结。 先来看一个简单的例子。 1 #include <QtGui/QPushButton> 2 #include <QtGui/QWidget> 3...