显示当地日期与时间主要通过localtime()
函数来实现,该函数的原型在time.h
头文件中,其语法格式如下:
struct tm *localtime(const time_t *timep)
该函数的作用是把timep所指的时间(如函数time返回的时间)转换为当地标准时间,并以tm结构形式返回。其中,参数timer为主要获取当前时间的传递参数,格式为time_t指针类型。
//把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtimes函数转换后的时间没有经过时区变换,是UTC时间 //windows vs2010++ errno_t localtime_s( struct tm* _tm, //时间结构体的指针 const time_t *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) int tm_year,// 年份 (当前年份减去1970年或1900) int tm_wday,// 星期几 (0 – 6;星期日 = 0 int tm_yday, // (0-365) int tm_isdst, }
如果成功,返回值则为零。 如果失败,返回值将是错误代码。 错误代码是在 Errno.h 中定义的。
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> #include <cstring> #include <time.h> /**************** // system local timeStamp convert to stardard time format // CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间 *******/ void getCSTTimeFormat(char* pStdTimeFormat) { time_t nTimeStamp; time(&nTimeStamp); char pTmpString[256] = {0}; tm *pTmStruct = localtime(&nTimeStamp); sprintf(pTmpString, "%04d-%02d-%02d %02d:%02d:%02d", pTmStruct->tm_year + 1900, pTmStruct->tm_mon + 1, pTmStruct->tm_mday, \ pTmStruct->tm_hour, pTmStruct->tm_min, pTmStruct->tm_sec); strcpy(pStdTimeFormat, pTmpString); return; } /**************** // GMT(Greenwich Mean Time)代表格林尼治标准时间 // convert to stardard time format *******/ void getGMTTimeFormat(char* pStdTimeFormat) { time_t ltime; time(<ime); //ltime += 8*3600; //北京时区 tm* gmt = gmtime(<ime); char s[128] = { 0 }; strftime(s, 80, "%Y-%m-%d %H:%M:%S", gmt); strcpy(pStdTimeFormat, s); // char* asctime_remove_nl = asctime(gmt); // asctime_remove_nl[24] = 0; // std::cout << std::string("Date: ") + asctime_remove_nl + " GMT" << std::endl; return; } /**************** // timeStamp convert to stardard time format *******/ void timeFormat2Timestamp(const char* strTimeFormat, time_t& timeStamp) { // strTimeFormat should be such as "2001-11-12 18:31:01" struct tm *timeinfo; memset( timeinfo, 0, sizeof(struct tm)); strptime(strTimeFormat, "%Y-%m-%d %H:%M:%S", timeinfo); //strptime("1970:01:01 08:00:00", "%Y:%m:%d %H:%M:%S", timeinfo); timeStamp = mktime(timeinfo); return; } int main(int argc, char** argv) { char s[128] = { 0 }; getGMTTimeFormat(s); printf("%s\n", s); char pStdTimeFormat[128] = { 0 }; getCSTTimeFormat(pStdTimeFormat); printf("%s\n", pStdTimeFormat); time_t timeStamp; timeFormat2Timestamp(s, timeStamp); std::cout << timeStamp << std::endl; printf("return code is %d \ngenerate done, enter any key to quit! ", 0); //getchar(); return 0; }