本文目录一览:
C语言如何获取本地时间,然后取时、分、秒的值?
C语言有2个获取时间的函数,分别是time()和localtime(),time()函数返回unix时间戳-即从1970年1月1日0:00开始所经过得秒数,而localtime()函数则是将这个秒数转化为当地的具体时间(年月日时分秒)
这里时间转化要用到一个“struct tm*”的结构体,结构如下:
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代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 */
int tm_yday; /* 从每年1月1日开始的天数– 取值区间[0,365],其中0代表1月1日 */
int tm_isdst; /* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */
};
示例代码:
#includestdio.h
#includetime.h
int getTime()
{
time_t t; //保存unix时间戳的变量 ,长整型
struct tm* lt; //保存当地具体时间的变量
int p;
time(t); // 等价于 t =time(NULL);获取时间戳
lt = localtime(t); //转化为当地时间
p = lt-tm_sec; //将秒数赋值给p
return p;
}
应该就是这样啦~
c语言中时间处理
1. ctime函数
函数: ctime
功 能: 把日期和时间转换为字符串
用 法: char *ctime(const time_t *time);
程序例:
#includecstdio
#includectime
intmain(void)
{
time_tt;
t=time(t);
printf("Today'sdateandtime:%s\n",ctime(t));
return0;
}
注:若在linux下使用本函数,需要include time.h头文件
2.CTime类
CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。CTimeSpan类的对象表示的是时间间隔。
CTime类一般不会被继承使用。其对象的大小是8个字节。
CTime表示的日期上限是2038年1月18日,下限是1970年1月1日 12:00:00 AM GMT。
CTime类的成员函数
CTime();
构造一个未经初始化的CTime对象。此构造函数使我们可以定义一个CTime对象的数组,在使用数组前需要以有效的时间值为其初始化。
CTime(__time64_t time);
以一个__time64_t(注意:最前面的下划线有两条)类型的数据来构造一个CTime对象。参数time是一个__time64_t类型的值,表示自GMT时间1970年1月1日零点以来的秒数,这里要注意的是,参数time代表的时间会转换为本地时间保存到构造的CTime对象中。例如,我们传递参数0构造一个CTime对象,然后调用CTime对象的GetHour成员函数将返回8,因为参数0代表的GMT时间转换为北京时间后为1970年1月1日 8:00:00。
CTime(
int nYear,
int nMonth,
int nDay,
int nHour,
int nMin,
int nSec,
int nDST = -1
);
以本地时间的年、月、日、小时、分钟、秒等几个时间分量构造CTime对象。参数nYear、nMonth、nDay、nHour、nMin、nSec分别表示年、月、日、小时、分钟、秒,取值范围如下:
时间分量 取值范围
nYear 1970-3000
nMonth 1-12
nDay 1-31
nHour 0-23
nMin 0-59
nSec 0-59
参数nDST指定是否实行夏令时,为0时表示实行标准时间,为正数时表示实行夏令时,为负数时由系统自动计算实行的是标准时间还是夏令时。
CTime(const SYSTEMTIME st,int nDST = - 1) ;
以一个SYSTEMTIME结构体变量来构造CTime对象。SYSTEMTIME结构体也是我们对日期时间的常用表示方式。参数st为以本地时间表示的SYSTEMTIME对象,参数nDST同上。
static CTime WINAPI GetCurrentTime( );
获取系统当前日期和时间。返回表示当前日期和时间的CTime对象。
int GetYear( ) const;
获取CTime对象表示时间的年份。范围从1970年1月1日到2038年(包括2038年)1月18日。
int GetMonth( ) const;
获取CTime对象表示时间的月份。范围为1到12。
int GetDay( ) const;
获取CTime对象表示时间的日期。范围为1到31。
int GetHour( ) const;
获取CTime对象表示时间的小时。范围为0到23。
int GetMinute( ) const;
获取CTime对象表示时间的分钟。范围为0到59。
int GetSecond( ) const;
获取CTime对象表示时间的秒。范围为0到59。
int GetDayOfWeek( ) const;
此函数的返回值表示CTime对象代表的是星期几,1表示是周日,2表示是周一,以此类推。
CString Format(LPCTSTR pszFormat) const;
将CTime对象中的时间信息格式化为字符串。参数pszFormat是格式化字符串,与printf中的格式化字符串类似,格式化字符串中带有%前缀的格式码将会被相应的CTime时间分量代替,而其他字符会原封不动的拷贝到返回字符串中。格式码及含义如下:
%a:周的英文缩写形式。
%A:周的英文全名形式。
%b: 月的英文缩写形式。
%B:月的英文全名形式。
%c: 完整的日期和时间。
%d:十进制形式的日期(01-31)。
%H:24小时制的小时(00-23)。
%I: 12小时制的小时(00-11)。
%j: 十进制表示的一年中的第几天(001-366)。
%m: 月的十进制表示(01-12)。
%M:十进制表示的分钟(00-59)。
%p: 12小时制的上下午标示(AM/PM)。
%S: 十进制表示的秒(00-59)。
%U: 一年中的第几个星期(00-51),星期日是一周的第一天。
%W: 一年中的第几个星期(00-51),星期一是一周的第一天。
%w: 十进制表示的星期几(0-6)。
%Y: 十进制表示的年。
CTime operator +(CTimeSpan timeSpan) const;
将CTime对象和CTimeSpan对象相加,返回一个CTime对象。实际意义就是在一个时间的基础上推后一个时间间隔,得到一个新的时间。
CTime operator -(CTimeSpan timeSpan) const;
将CTime对象和一个CTimeSpan相减,返回一个CTime对象。实际意义就是在一个时间的基础上提前一个时间间隔,得到一个新的时间。
CTimeSpan operator -(CTime time) const;
将该CTime对象和另一个CTime对象相减,返回一个CTimeSpan对象。实际意义就是计算两个时间点的间隔,得到一个CTimeSpan对象。
CTime operator +=(CTimeSpan span);
为该CTime对象增加一个span表示的时间间隔。
CTime operator -=(CTimeSpan span);
为该CTime对象减去一个span表示的时间间隔。
CTime operator =(__time64_t time);
为该CTime对象赋予一个新的时间值。
简单说下剩下的几个重载i运算符:
operator == : 比较两个绝对时间是否相等。
operator != : 比较两个绝对时间是否不相等。
operator : 比较两个绝对时间,是否前一个大于后一个。
operator : 比较两个绝对时间,是否前一个小于后一个。
operator = : 比较两个绝对时间,是否前一个大于等于后一个。
operator = : 比较两个绝对时间,是否前一个小于等于后一个。[1]
=====================================================================
C++中,CTime 与 CString转换
CTime m_StartTime1 = CTime::GetCurrentTime();
CString csStartTime = m_StartTime1.Format( "%Y%m%d%H%M%S" );
一.将CString转为CTime的几种方法
CString timestr = "2000年04月05日";
int a,b,c ;
sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",a,b,c);
CTime time(a,b,c,0,0,0);
--------or - ---------------------
CString s("2001-8-29 19:06:23");
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(s, "%d-%d-%d %d:%d:%d", nYear, nMonth, nDate, nHour, nMin, nSec);
CTime t(nYear, nMonth, nDate, nHour, nMin, nSec);
---- or ------------------------
CString timestr = "2000年04月05日";
int year,month,day;
BYTE tt[5];
//get year
memset(tt, 0, sizeof(tt));
tt[0] = timestr[0];
tt[1] = timestr[1];
tt[2] = timestr[2];
tt[3] = timestr[3];
year= atoi((char *)tt);
//get month
memset(tt, 0, sizeof(tt));
tt[0] = timestr[6];
tt[1] = timestr[7];
month = atoi((char *)tt);
//get day
memset(tt, 0, sizeof(tt));
tt[0] = timestr[10];
tt[1] = timestr[11];
day = atoi((char *)tt);
CTime time(year,month,day,0,0,0);
从上面来看,很明显使用sscanf()函数的优势.
二.将CTIme转换为CString的方法:
CTime tmSCan = CTime::GetCurrentTime();
CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'");
这样得到的日期时间字符串就是以"2006-11-27 23:30:59"的格式.这是不是很方便呢?
//取得CTime中的日期
CString cstrDate = tmScan.Format("%Y-%m-%d");
//取得CTime中的时间
CString cstrTime = tmScan.Format("%H:%M-%S");
sprintf还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。这里举个例子:
更多更好的sprintf()函数说明参考:《spirntf,你知道多少?》
time_t t = time(0);
//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。
char s[32];
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(t));
sprintf在MFC中也能找到他的知音:CString::Format,strftime在MFC中自然也有她的同道:CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅
C语言中的时间
以前实际上用过,很想对C语言中的时间函数了解多一点,趁着这个寒假,查了些资料,大概把我现在能用到的关于时间的操作在此记录下来。通过几个函数来熟悉C语言中对时间的操作。(注:以下程序均在VS2010上编译通过。)①time()函数。可以通过time()函数来获得日历时间。其原型为:time_ttime(time_t*timer);一般参数为空,返回值类型time_t是一个长整型数,函数将返回现在的日历时间,即从一个时间点(所有不同版本的VisualC++都是从1970年1月1日0时0分0秒)到现在的经过的秒数。例子程序:#includestdio.h#includetime.hvoidmain(){time_tlt;lt=time(NULL);printf("1970年1月1日0时0分0秒到现在经历了%ld秒\n",lt);}运行结果(结果与程序运行的时间有关,贴出我此时运行出的结果):1970年1月1日0时0分0秒到现在经历了1326975564秒请按任意键继续...②clock()函数。C语言中的计时函数。函数原型为:clock_tclock(void);clock()函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元数。返回值类型clock_t也是一个长整型数。在time.h头文件中定义了一个符号常量CLOCKS_PER_SEC,表示一秒钟会有多少个计时单元。所以通过简单的数学知识,可以知道在程序中用clock()/CLOCKS_PER_SEC来表示程序从开始到调用clock()函数时用了多少秒。例子程序:#includestdio.h#includetime.hvoidmain(){clock_tlt;for(inti=0;i1000000000;i++);lt=clock();printf("循环执行1000000000个空操作需要%f秒\n",(double)lt/CLOCKS_PER_SEC);}运行结果(在不同的机器上运行的结果可能不一样,下面是在我自己的笔记本上运行的结果):循环执行1000000000个空操作需要3.484000秒请按任意键继续...③使用C库函数来显示日期和时间。首先要介绍一下C语言中的一个日期的结构体类型,tm类型。其在time.h中的定义如下:#ifndef_TM_DEFINEDstructtm{inttm_sec;inttm_min;inttm_hour;inttm_mday;inttm_mon;inttm_year;inttm_wday;inttm_yday;inttm_isdst;};#define_TM_DEFINED#endif然后可以介绍有关的函数了。time.h提供了两种不同的函数将日历时间(一个长整型数)转换成我们平时看到的把年月日时分秒分开的时间格式:structtm*gmtime(consttime_t*timer);structtm*localtime(consttime_t*timer);其中gmtime()函数是将日历时间转换为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转换为本地时间(在中国地区获得的本地时间会比世界标准时间晚8个小时)。例子程序:#includestdio.h#includetime.hvoidmain(){structtm*local;time_tt;t=time(NULL);local=localtime(t);printf("现在北京时间是%d点\n",local-tm_hour);local=gmtime(t);printf("世界标准时间是%d点\n",local-tm_hour);}运行结果(运行结果与运行的时间有关,我是在早上9点多钟运行这个程序的):现在北京时间是9点世界标准时间是1点请按任意键继续...这样子我们就可以完全才输出此刻的年月日时分秒了,当然需要逐个来输出。其实C库函数还提供了一个很有用的以固定的时间格式来输出年月日时分秒的函数。这两个函数原型如下:char*asctime(conststructtm*timeptr);char*ctime(consttime_t*timer);asctime()函数是通过tm结构来生成具有固定格式的保存时间信息的字符串,而ctime()是通过日历时间来生成时间字符串。这样下面的例子程序就容易理解了:#includestdio.h#includetime.hvoidmain(){structtm*local;time_tt;t=time(NULL);local=localtime(t);printf(asctime(local));local=gmtime(t);printf(asctime(local));printf(ctime(t));}运行结果(我是在早上9点多运行这个程序的):FriJan2009:55:562012FriJan2001:55:562012FriJan2009:55:562012请按任意键继续...C语言还可以以我们规定的各种形式来规定输出时间的格式。要用到时可以查阅相关的资料,限于篇幅,就介绍到这里。④这里介绍计算持续的时间长度的函数。之前已经介绍了使用clock()函数的例子,它可以精确到毫秒级。其实我们也可以使用difftime()函数,但它只精确到秒。该函数的定义如下:doubledifftime(time_ttime1,time_ttime0);例子程序:#includestdio.h#includetime.h#includestdlib.hvoidmain(){time_tstart,end;start=time(NULL);for(inti=0;i1000000000;i++);end=time(NULL);printf("这个循-环用了%f秒\n",difftime(end,start));}运行结果:这个循环用了3.000000秒请按任意键继续...⑤最后介绍mktime()函数。原型如下:time_tmktime(structtm*timer);可以使用函数将用tm结构表示的时间转换为日历时间。其返回值就是转换后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作。下面的例子用来计算2012年1月20日是星期几:#includetime.h#includestdio.h#includestdlib.hintmain(void){structtmt;time_tt_of_day;t.tm_year=2012-1900;t.tm_mon=0;t.tm_mday=20;t.tm_hour=0;t.tm_min=12;t.tm_sec=1;t.tm_isdst=1;t_of_day=mktime(t);printf(ctime(t_of_day));return0;}运行结果:FriJan2000:12:012012请按任意键继续...