最近项目是写个软件,软件本身并不困难,主要是通过周期从数据库查找数据进行一定操作后再插到另一张表中去。在写这个软件的过程中,对时间有一定的操作,在此做一点总结,以备后用。
主要用到的函数有如下几个:
time_t time(time_t* t);
tm* localtime(time_t* t);
double difftime(time_t t1, time_t t2);
char* ctime(const time_t* t);
time_t mktime(tm* tm_);
size_t strftime (char* ptr, size_t maxsize, const char* format,const tm* timeptr );
char* strptime(const char* buf,const char* format,tm* timeptr)
各个函数的作用这里就暂不表述了。本文主要对以下几点进行总结:
- 时间日期字符串的获取
- 时间和字符串的互相转换
- 时间的加减
1.时间日期字符串的获取
刚开始,我获得日期时间字符串的方式是通过time()函数获得,然后通过localtime函数得到time结构体,因为tm结构体内储存的才是我们想要的。但是呢,我要插入到数据库中,我需要的是一个字符串,所以我就自己组包了,代码如下;
//代码0
time_t* now;
tm* Tm;
char time_string[20] = {0};
time(now);
Tm = localtime(now);
snprintf(time_string, sizeof(time_string)-1,"%4d-%02d-%02d %02d:%02d:%02d",
1900 + Tm->tm_year,
1 + Tm->tm_mon,
Tm->tm_mday,
Tm->tm_hour,
Tm->tm_min,
Tm->tm_sec);
在我的项目里,上述的time_t和tm结构体都是类中的私有成员,我把组包的过程写成了一个接口,周期时间是以秒为单位写在配置文件中的,这样当每个周期变化的时候,我是直接对time_t进行加减操作,这样每个周期都能得到其开始时间结束时间的字符串,效果如下:
//代码1
#include <ctime>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <ctring>
using namespace std;
const int TERM = 60;
int main()
{
time_t now;
tm* Tm;
char time_string[20] = {0};
time(&now);
Tm = localtime(&now);