C/C++时间相关操作 SYSTEMTIME time_t 字符串的相互转换

****************** 一、 时间相关 ******************
SYSTEMTIME
time_t 是长整型,long int
tm 是一个结构体 time.h
localtime
mktime
GetLocalTime(&sysTime ); 获取当前时间 SYSTEMTIME类型
CTime t = GetCurrentTime(); MFC
****************** 二、 时间转换函数 ******************
① time_t与SYSTEMTIME之间的相互转换
/*
**time_t转SYSTEMTIME
*/
SYSTEMTIME Time_tToSystemTime(time_t t)
{
tm temptm = *localtime(&t);
SYSTEMTIME st = {1900 + temptm.tm_year,
1 + temptm.tm_mon,
temptm.tm_wday,
temptm.tm_mday,
temptm.tm_hour,
temptm.tm_min,
temptm.tm_sec,
0};
return st;
}
/*
**SYSTEMTIME转time_t
*/
time_t SystemTimeToTime_t( const SYSTEMTIME& st )
{
tm temptm = {st.wSecond,
st.wMinute,
st.wHour,
st.wDay,
st.wMonth - 1,
st.wYear - 1900,
st.wDayOfWeek,
0,
0};

return mktime(&temptm);

}

② 字符串与SYSTEMTIME之间的相互转换
/*
**SYSTEMTIME 转 字符串
*/
SYSTEMTIME sysTime;
GetLocalTime(&sysTime );
time_t now;
struct tm *today;
now = time( (long*)&sysTime );
char tmpbuf[128];
today = localtime( &now );
strftime(tmpbuf, 128, “%H:%M:%S\n “, today );

/*
** 字符串 转 SYSTEMTIME
*/

③ 字符串与time_t之间的相互转换
/*
**time_t 转 字符串
*/
time_t now;
struct tm *today;
now = time( &now );
char tmpbuf[128];
today = localtime( &now );
strftime(tmpbuf, 128, “%H:%M:%S\n “, today );

/*
** 字符串 转 time_t
*/
****************** 三、 不同库的时间相关函数 ******************
① 、标准库(unix时间相关)#include < time.h >
1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;
time_t timegm(struct tm *tm);
2.mktime使用时区信息
time_t mktime(struct tm *tm);
timelocal 函数是GNU扩展的与posix函数mktime相当
time_t timelocal (struct tm *tm);
3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;
struct tm * gmtime(const time_t *clock);
4.localtime使用时区信息
struct tm * localtime(const time_t *clock);
5.time获取时间,stime设置时间
time_t t;
t = time(&t);
6.stime其参数应该是GMT时间,根据本地时区设置为本地时间;
int stime(time_t *tp)

time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t
看看你的系统是否有time_t64,它能表示更大的时间范围

② 、Windows时间相关
CTime MFC类
CTime t = GetCurrentTime();
SYSTEMTIME 结构包含毫秒信息
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
SYSTEMTIME t1;
GetSystemTime(&t1)
CTime curTime(t1);
WORD ms = t1.wMilliseconds;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);

在time.h中的_strtime() //只能在windows中用
char t[11];
_strtime(t);
puts(t);

如何设定当前系统时间—windows
SYSTEMTIME m_myLocalTime,*lpSystemTime;
m_myLocalTime.wYear=2003;
m_myLocalTime.wMonth=1;
m_myLocalTime.wDay=1;
m_myLocalTime.wHour=0;
m_myLocalTime.wMinute=0;
m_myLocalTime.wSecond=0;
m_myLocalTime.wMilliseconds=0;
lpSystemTime=&m_myLocalTime;
if( SetLocalTime(lpSystemTime) ) //此处换成 SetSystemTime( )也不行
MessageBox(“OK !”);
else
MessageBox(“Error !”);

SYSTEMTIME m_myLocalTime,*lpSystemTime;
m_myLocalTime.wYear=2003;
m_myLocalTime.wMonth=1;
m_myLocalTime.wDay=1;
lpSystemTime=&m_myLocalTime;
if( SetDate(lpSystemTime) ) //此处换成 SetSystemTime( )也不行
MessageBox(“OK !”);
else
MessageBox(“Error !”);

****************** 四、 验证程序 ******************
****************** 五、 待整理 ******************


用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
clock_t clock ( void );

include

他是记录时钟周期的,实现看来不会很精确,需要试验验证;

据说tc2.0的time结构含有毫秒信息

include

include

time 是一个结构体,, 其中成员函数 ti_hund 是豪秒。。。上程序可以在tc2.0运行

这个是windows里面常用来计算程序运行时间的函数;
DWORD dwStart = GetTickCount();
//这里运行你的程序代码
DWORD dwEnd = GetTickCount();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位
这个函数只精确到55ms,1个tick就是55ms。


timeGetTime()基本等于GetTickCount(),但是精度更高
DWORD dwStart = timeGetTime();
//这里运行你的程序代码
DWORD dwEnd = timeGetTime();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

虽然返回的值单位应该是ms,但传说精度只有10ms。

****************** l六、 说明 ******************
文中很多资料是在网上查询所得,记录在此方便查看,也转载了部分别的大神的文文,谨在此说明!

发布了1 篇原创文章 · 获赞 0 · 访问量 8646
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览