失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C/C++时间相关操作 SYSTEMTIME time_t 字符串的相互转换

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

时间:2021-11-14 12:08:23

相关推荐

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=;

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=;

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六、 说明******************

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

如果觉得《C/C++时间相关操作 SYSTEMTIME time_t 字符串的相互转换》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。