VC++获得当前系统日期和时间问题汇总
来源:互联网 发布:数据库的数据模型包含 编辑:程序博客网 时间:2024/05/17 21:17
Ⅰ.VC中得到当前系统的时间和日期:
得到时间的方法一般都是得到从1900年0点0分到现在的秒数,然后转为年月日时分秒的形式得到当前的时间(时分秒)。主要方法如下:
1)使用CRT函数C++代码
- char
szCurrentDateTime[32]; - time_t
nowtime; - struct
tm* ptm; - time(&nowtime);
- ptm
= localtime(&nowtime); - sprintf(szCurrentDateTime,
"M-%.2d-%.2d %.2d:%.2d:%.2d" , -
ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, -
ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
C++代码
- char
szCurrentDateTime[32]; - SYSTEMTIME
systm; - GetLocalTime(&systm);
- sprintf(szCurrentDateTime,
"M-%.2d-%.2d %.2d:%.2d:%.2d" , -
systm.wYear, systm.wMonth, systm.wDay, -
systm.wHour, systm.wMinute, systm.wSecond);
C++代码
- char
szCurrentDateTime[32]; - CTime
nowtime; - nowtime
= CTime::GetCurrentTime(); -
- sprintf(szCurrentDateTime,
"M-%.2d-%.2d %.2d:%.2d:%.2d" , -
nowtime.GetYear(), nowtime.GetMonth(), nowtime.GetDay(), -
nowtime.GetHour(), nowtime.GetMinute(), nowtime.GetSecond());
Ⅱ.用VC++获取系统时间几种方法:
A:1 使用time_t time( time_t * timer ) 精确到秒
计算时间差使用double difftime( time_t timer1, time_t timer0 )
计算时间差使用double difftime( time_t timer1, time_t timer0 )
2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒
3 使用DWORD GetTickCount() 得到的是系统运行的时间 精确到毫秒
4 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒
5 要获取高精度时间,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值
然后用两次计数器的差除以Frequency就得到时间。
6 还有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高
Q:GetTickCount()函数,说是毫秒记数,是真的吗,还是精确到55毫秒?
A:
GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考QA001022 "VC++中使用高精度定时器"、QA001813 "如何在Windows实现准确的定时"和QA004842 "timeGetTime函数延时不准"。
GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考QA001022 "VC++中使用高精度定时器"、QA001813 "如何在Windows实现准确的定时"和QA004842 "timeGetTime函数延时不准"。
Q:vc++怎样获取系统时间,返回值是什么类型的变量呢?
GetSystemTime返回的是格林威志标准时间
GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // address of system time structure
);
函数就可以获得了,其中LPSYSTEMTIME 是个结构体
含:年,月,日,周几,小时,分,秒,毫秒。
CTime time;
time.GetCurrentTime();
CString str;
str.Format("%s",time.Format("%y:%m:%d %H-%M-%S")
1
CString str;
CTime t = CTime::GetCurrentTime();
str.Format("%d-%d-%d",t.GetYear(),t.GetMonth(),t.GetDay());
2
CString strTime;
CTime tTime = CTime::GetCurrentTime();
strTime = tTime.Format("%Y-%m-%d %H:%M:%S");
CString ==>CTime
strCString="2003-10-27 6:24:37";//CString--->COleDateTime
COleVariant vtime(strCString);
vtime.ChangeType(VT_DATE);
COleDateTime time4=vtime;
COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime();//CTime--->time_t
COleDateTime time3(time2);//time_t--->COleDateTime
时间差
COleDateTime strFirst,strEnd;
strFirst = COleDateTime(strFirst.GetYear(),strFirst.GetMonth(),strFirst.GetDay(),0,0,0);
strEnd = COleDateTime(tmCurrent.GetYear(),tmCurrent.GetMonth(),tmCurrent.GetDay(),23,59,59);
tspan= strEnd - strFirst;
GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // address of system time structure
);
函数就可以获得了,其中LPSYSTEMTIME 是个结构体
含:年,月,日,周几,小时,分,秒,毫秒。
Ⅲ.VC++获得当前系统时间的几种方案
//方案- 优点:仅使用C标准库;缺点:只能精确到秒级- #include
< time.h> - #include
< stdio.h> - int
main( void ) - {
- time_t
t = time( 0 ); - char
tmp[64]; - strftime(
tmp, sizeof(tmp), " %Y/%m/%d %X %A 本年第%j天 %z" , localtime(&t) ); - puts(
tmp ); - return
0; - }
//方案二 优点:能精确到毫秒级;缺点:使用了windows API
- #include
< windows.h> - #include
< stdio.h> - int
main( void ) - {
- SYSTEMTIME
sys; - GetLocalTime(
&sys ); - printf(
" M/d/d d:d:d.d 星期\n" - ,sys.wYear,sys.wMonth,sys.wDay
- ,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds
- ,sys.wDayOfWeek);
- return
0; - }
//方案三,优点:利用系统函数
- #include<
stdlib.h> - #include<
iostream> - using
namespace std; - void
main(){ - system("
time" ); - }
可以改变电脑的时间设定
方案4:
- #include<
iostream> - #include<
ctime> - using
namespace std; - int
main() - {
- time_t
now_time; - now_time
= time(NULL); - cout<
< now_time; - return
0; - }
另一:_strdate(tempstr);
另二: CTime
- CString
CTestView::GetTime() - {
- CTime
CurrentTime=CTime::GetCurrentTime(); - CString
strTime; - strTime.Format("
%d:%d:%d" ,CurrentTime.GetHour(), CurrentTime.GetMinute() - ,CurrentTime.GetSecond());
- return
strTime; - }
Ⅳ.VC++ 时间类型转换: CTime, COleDateTime, time_t, CString
CTime==>CStringCTime time;
time.GetCurrentTime();
CString str;
str.Format("%s",time.Format("%y:%m:%d %H-%M-%S")
1
CString str;
CTime t = CTime::GetCurrentTime();
str.Format("%d-%d-%d",t.GetYear(),t.GetMonth(),t.GetDay());
2
CString strTime;
CTime tTime = CTime::GetCurrentTime();
strTime = tTime.Format("%Y-%m-%d %H:%M:%S");
CString ==>CTime
strCString="2003-10-27 6:24:37";
COleVariant vtime(strCString);
vtime.ChangeType(VT_DATE);
COleDateTime time4=vtime;
COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime();
COleDateTime time3(time2);
时间差
COleDateTime strFirst,strEnd;
strFirst = COleDateTime(strFirst.GetYear(),strFirst.GetMonth(),strFirst.GetDay(),0,0,0);
strEnd = COleDateTime(tmCurrent.GetYear(),tmCurrent.GetMonth(),tmCurrent.GetDay(),23,59,59);
tspan= strEnd - strFirst;
补充:
MFC与C++关于CTime类、COleDateTime类与CTimeSpan类的使用
关于CTime类、COleDateTime类与CTimeSpan类的详细介绍可以参考MSDN:
https://msdn.microsoft.com/zh-cn/library/78zb0ese
https://msdn.microsoft.com/zh-cn/library/38wh24td(v=vs.100).aspx
https://msdn.microsoft.com/zh-cn/library/ay6ws8h3
本文只是给出这些类的能提供的常用功能。
二、常用功能
1、CTime获取当天时间
CTime ti = CTime::GetCurrentTime();
2、当前时间增加或减少一天
昨天:CTime ti = CTime::GetCurrentTime()-CTimeSpan( 1, 0, 0, 0 );
明天:CTime ti = CTime::GetCurrentTime()+CTimeSpan( 1, 0, 0, 0 );
CTimeSpan的第一个参数为天数,通过调节该参数可以给出若干天前后的时间。举一反三,可以通过它的对象接收两个CTime对象的差值,给出时间跨度。
3、CTime与COleDateTime转换
3.1、CTime转COleDateTime
CTime ti = CTime::GetCurrentTime()
time_t tm = ti.GetTime();
COleDateTime toi(tm);
XValues[i] = COleDateTime(tm);
关于CTime类、COleDateTime类与CTimeSpan类的详细介绍可以参考MSDN:
https://msdn.microsoft.com/zh-cn/library/78zb0ese
https://msdn.microsoft.com/zh-cn/library/38wh24td(v=vs.100).aspx
https://msdn.microsoft.com/zh-cn/library/ay6ws8h3
本文只是给出这些类的能提供的常用功能。
二、常用功能
1、CTime获取当天时间
CTime ti = CTime::GetCurrentTime();
2、当前时间增加或减少一天
昨天:CTime ti = CTime::GetCurrentTime()-CTimeSpan( 1, 0, 0, 0 );
明天:CTime ti = CTime::GetCurrentTime()+CTimeSpan( 1, 0, 0, 0 );
CTimeSpan的第一个参数为天数,通过调节该参数可以给出若干天前后的时间。举一反三,可以通过它的对象接收两个CTime对象的差值,给出时间跨度。
3、CTime与COleDateTime转换
3.1、CTime转COleDateTime
CTime ti = CTime::GetCurrentTime()
time_t tm = ti.GetTime();
COleDateTime toi(tm);
XValues[i] = COleDateTime(tm);
三、CTime类与COleDateTime类的区别:
1、CTime和COleDateTime功能相近。不过COleDateTime使用更广泛,该类允许用户获得一年中的某一天,还可以分析时间字符串。
2、COleDateTime支持DWORD变量。COleDateTime使用double类型,它表示从1900年12月30号之后的天数(小时是天的小数部分),几千年之内不会溢出。CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2037年它将达到4294967295后溢出。
3、 把时间转换为字符串。
CString sDate,sTime,sElapsed Time ;
sDate = time.Format("%m/%d/%y"); //ex: 12/10/98
sTime = time.Format("%H:%M:%S"); //ex: 9:12:02
sElapsed Time = timespan.Format("%D:%H:%M:%S"); // %D is total elapsed days
4、 把字符串转换为时间。
CString sDateTime;
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(sDateTime, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
CTime sTime(nYear, nMonth, nDate, nHour, nMin, nSec);
要想知道更多的时间格式,参见MFC文档中的strftime
使用COleDateTime类
1) 获得一年中的某一天。
COleDateTime datetime;
datetime = COleDateTime::GetCurrentTime();
int DayOfYear = datetime.GetDayOfYear();
2) 从文本串中读取时间。
COleDateTime datetime;
datetime.ParseDateTime("12:12:23 27 January 93");
3) 获取时间间隔。
//比方计算日期差
COleDateTime begin_date(1970, 1, 1, 0, 0, 0);
COleDateTime end_date(1990, 1, 1, 0, 0, 0);
COleDateTimeSpan timeSpan; //计算时间差
timeSpan = end_date - begin_date;
long expi_date = timeSpan.GetDays();
说明
一、COleDateTime
.Net有DateTime类用来处理日期时间,很方便,VC则可以用ATL库的COleDateTime类,用起来也还不错:
首先包含相关的头文件:
#include <ATLComTime.h>
初始化COleDateTime实例:
COleDateTime date_time;
date_time.SetDate(Year, Month, Day);
date_time.SetTime(Hour, Minute, Second);
COleDateTime重载了+,-,+=,-=等运算符,可以方便的让时间日期前进倒退,操作对象为COleDateTimeSpan,如:
date_time += COleDateTimeSpan(Day, Hour, Minute, Second); //天,时,分,秒
COleDateTime还可以将一个有效的时间字符串Parse过来,初始化实例本身:
date_time.ParseDateTime(CString("2008-04-18 09:00:00"));
反过来,COleDateTime可以Format成一个时间日期格式的字符串CString:
date_time.Format(L"%Y%m%d"); // 年,月,日, 注意m大写表示分钟Minute
二、CString
CString用法比较简单,可是有些用法长期不用会忘掉,为了下次要用的时候能快速通过经验找到答案,所以还是写下一些东西。
CString 有个Format成员,能转化成一个CString,参数跟C的printf用法差不多,如:
CString str;
str.Format("%s%d%02i", CString("Example"), 9, 1);// 第一个参数string,第二个Signed十进制数,第三个是宽度为2,不够则以0填充的Signed十进制数,
因此操作之后str的值为:
Expample901
CTime COleDateTime的常用操作和比较(转)
1) 获取当前时间。
datetime = COleDateTime::GetCurrentTime();
CTime和COleDateTime具有几乎同样的功能。
与CTime相比, COleDateTime的优点在于它支持DWORD变量。
COleDateTime使用的位数是双浮点的两倍,既然CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2 0 3 7年它将达到4 2 9 4 9 6 7 2 9 5,从而不能再使用。
//CString--->COleDateTime
COleVariant vtime(strCString);COleDateTime time4=vtime;
//CTime--->time_t
COleDateTime time3(time2);
//time_t--->COleDateTime.
CString COleDateTime CTime互相转换
strCString="2003-10-27 6:24:37"; //CString--->COleDateTime
COleVariant vtime(strCString);
vtime.ChangeType(VT_DATE);
COleDateTime time4=vtime;
COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime(); //CTime--->time_t
COleDateTime time3(time2); //time_t--->COleDateTime
CString str = tDate.Format(_T("%Y-%m-%d"));
1、CTime和COleDateTime功能相近。不过COleDateTime使用更广泛,该类允许用户获得一年中的某一天,还可以分析时间字符串。
2、COleDateTime支持DWORD变量。COleDateTime使用double类型,它表示从1900年12月30号之后的天数(小时是天的小数部分),几千年之内不会溢出。CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2037年它将达到4294967295后溢出。
3、 把时间转换为字符串。
CString sDate,sTime,sElapsed Time ;
sDate = time.Format("%m/%d/%y"); //ex: 12/10/98
sTime = time.Format("%H:%M:%S"); //ex: 9:12:02
sElapsed Time = timespan.Format("%D:%H:%M:%S"); // %D is total elapsed days
4、 把字符串转换为时间。
CString sDateTime;
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(sDateTime, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
CTime sTime(nYear, nMonth, nDate, nHour, nMin, nSec);
要想知道更多的时间格式,参见MFC文档中的strftime
使用COleDateTime类
1) 获得一年中的某一天。
COleDateTime datetime;
datetime = COleDateTime::GetCurrentTime();
int DayOfYear = datetime.GetDayOfYear();
2) 从文本串中读取时间。
COleDateTime datetime;
datetime.ParseDateTime("12:12:23 27 January 93");
3) 获取时间间隔。
//比方计算日期差
COleDateTime begin_date(1970, 1, 1, 0, 0, 0);
COleDateTime end_date(1990, 1, 1, 0, 0, 0);
COleDateTimeSpan timeSpan; //计算时间差
timeSpan = end_date - begin_date;
long expi_date = timeSpan.GetDays();
说明
一、COleDateTime
.Net有DateTime类用来处理日期时间,很方便,VC则可以用ATL库的COleDateTime类,用起来也还不错:
首先包含相关的头文件:
#include <ATLComTime.h>
初始化COleDateTime实例:
COleDateTime date_time;
date_time.SetDate(Year, Month, Day);
date_time.SetTime(Hour, Minute, Second);
COleDateTime重载了+,-,+=,-=等运算符,可以方便的让时间日期前进倒退,操作对象为COleDateTimeSpan,如:
date_time += COleDateTimeSpan(Day, Hour, Minute, Second); //天,时,分,秒
COleDateTime还可以将一个有效的时间字符串Parse过来,初始化实例本身:
date_time.ParseDateTime(CString("2008-04-18 09:00:00"));
反过来,COleDateTime可以Format成一个时间日期格式的字符串CString:
date_time.Format(L"%Y%m%d"); // 年,月,日, 注意m大写表示分钟Minute
二、CString
CString用法比较简单,可是有些用法长期不用会忘掉,为了下次要用的时候能快速通过经验找到答案,所以还是写下一些东西。
CString 有个Format成员,能转化成一个CString,参数跟C的printf用法差不多,如:
CString str;
str.Format("%s%d%02i", CString("Example"), 9, 1);// 第一个参数string,第二个Signed十进制数,第三个是宽度为2,不够则以0填充的Signed十进制数,
因此操作之后str的值为:
Expample901
CTime COleDateTime的常用操作和比较(转)
1) 获取当前时间。
datetime = COleDateTime::GetCurrentTime();
CTime和COleDateTime具有几乎同样的功能。
与CTime相比, COleDateTime的优点在于它支持DWORD变量。
COleDateTime使用的位数是双浮点的两倍,既然CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2 0 3 7年它将达到4 2 9 4 9 6 7 2 9 5,从而不能再使用。
//CString--->COleDateTime
COleVariant vtime(strCString);COleDateTime time4=vtime;
//CTime--->time_t
COleDateTime time3(time2);
//time_t--->COleDateTime.
CString COleDateTime CTime互相转换
strCString="2003-10-27 6:24:37"; //CString--->COleDateTime
COleVariant vtime(strCString);
vtime.ChangeType(VT_DATE);
COleDateTime time4=vtime;
COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime(); //CTime--->time_t
COleDateTime time3(time2); //time_t--->COleDateTime
CString str = tDate.Format(_T("%Y-%m-%d"));
0 0
- VC++获得当前系统日期和时间问题汇总
- VC++获得当前系统日期和时间问题汇总
- VC++获得当前系统日期和时间问题汇总
- VC++获得当前系统日期和时间问题汇总
- VC中获得当前日期和时间
- VC中获得当前日期和时间
- VC中获得当前日期和时间
- C++获得系统当前时间和日期
- DELPHI获得系统当前时间日期和格式化时间
- 【VC++】VC++获得当前系统时间
- C语言获得系统当前日期和时间
- [C] C语言中获得系统当前日期 和 时间
- ios 获得当前的系统时间和日期
- VC中得到当前系统的时间和日期
- mysql 获得当前时间和日期函数
- VC++得到当前系统时间日期 GetSystemTime()
- VC++得到当前系统时间日期 GetSystemTime()
- vc获得当前时间
- python 如何操作mysql 数据库
- hiredis中lua脚本调用
- Backtracking
- ajax实现跨域问题
- 视频播放技术汇总(列表播放,小窗播放,跨界面播放,播放中网络切换提示)
- VC++获得当前系统日期和时间问题汇总
- angular.bindbind 用法
- 鼠标点击不同位置触发的事件
- 使用Logback日志保存到相对路径记录
- javamail 邮箱
- 弹窗窗口在浏览器上面居中
- PLSQL UTL_FILE input from file
- Struts2——基于StrutsTypeConverter的类型转换
- spring 注解