FILETIME SYSTEMTIME tm time_t

FILETIME SYSTEMTIME tm time_t


TimeConvert.h

  1. // TimeConvert.h: interface for the TimeConvert class.  
  2. //  
  3. //@anthor:TT  
  4. //@time:2012.11.22  
  5. //@introduction:今天由于处理一个时间,搞得焦头烂额,于是乎打算封装一个转换类,方便自己以后使用,  
  6. /*先说个概念: 
  7. Coordinated Universal Time(UTC):又称为世界标准时间;时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。 
  8. 比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。 
  9. Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。对于不同的编译器,是不同的。 
  10. 但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。 
  11. */  
  12. //这里面涉及了三个类型  
  13. /* 
  14. *1.FILETIME:结构持有的64位无符号的文件的日期和时间值。此值表示自1601年1月1日开始的100纳秒为单位的时间。 
  15. *2.SYSTEMTIME:这个和tm有点类似,代表系统时间 
  16. *3.tm:Systemtime-1900得到tm.year,其他的还有些差别 
  17. *4.time_t:是日历时间;其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间) 
  18. *到当前时刻的秒数。 
  19. */  
  20. //  
  21.   
  22. #if !defined(AFX_TIMECONVERT_H__87F35906_DBD6_46F1_BF78_2FA34FCB8409__INCLUDED_)  
  23. #define AFX_TIMECONVERT_H__87F35906_DBD6_46F1_BF78_2FA34FCB8409__INCLUDED_  
  24.   
  25. #if _MSC_VER > 1000  
  26. #pragma once  
  27. #endif // _MSC_VER > 1000  
  28. #include <time.h>  
  29. #include<olectl.h.>  
  30. class TimeConvert    
  31. {  
  32. public:  
  33.     static void SystemTimeToFileTime(const SYSTEMTIME*pst,FILETIME *pft);  
  34.     static void Time_tToFileName(time_t t,FILETIME *ft);  
  35.     static void TmToTime_t(tm &_t,time_t &t);  
  36.     static void Time_tToTm(time_t t,tm *_t);  
  37.     static void TmToSystemTime(const tm &t,SYSTEMTIME *st);  
  38.     static void SystemTimeTOTm(const SYSTEMTIME &st,tm*t);  
  39.     static void FileTimeToTime_t(const FILETIME  *ft,  time_t  *t);  
  40.     static void Time_tToSystemTime(time_t t, SYSTEMTIME *pst);  
  41.     static void FileTimeToSystemTime(const FILETIME *lpFileTime,SYSTEMTIME *lpSystemTime);  
  42.     static void SystemTimeToTime_T(SYSTEMTIME *st, time_t *pt );  
  43.     static void FileTimeToTm(const FILETIME *ft,tm *t);  
  44.     static void TmToFileTime(tm &t,FILETIME *ft);  
  45.     static void TimeFormat(char *dest,int length,const char *format,const tm*t);  
  46. private:  
  47.     TimeConvert();  
  48.     virtual ~TimeConvert();  
  49.   
  50.   
  51. };  
  52.   
  53. #endif // !defined(AFX_TIMECONVERT_H__87F35906_DBD6_46F1_BF78_2FA34FCB8409__INCLUDED_)  

TimeConvert.cpp
  1. // TimeConvert.cpp: implementation of the TimeConvert class.  
  2. //  
  3. //  
  4.   
  5. #include "TimeConvert.h"  
  6.   
  7. //  
  8. // Construction/Destruction  
  9. //  
  10.   
  11. TimeConvert::TimeConvert()  
  12. {  
  13.   
  14. }  
  15.   
  16. TimeConvert::~TimeConvert()  
  17. {  
  18.   
  19. }  
  20.   
  21. void TimeConvert::FileTimeToSystemTime(const FILETIME *lpFileTime,SYSTEMTIME *lpSystemTime)  
  22. {  
  23.     ::FileTimeToSystemTime(lpFileTime,lpSystemTime);  
  24. }  
  25.   
  26. void TimeConvert::Time_tToSystemTime(time_t t, SYSTEMTIME *pst )  
  27. {  
  28. //  FILETIME ft;  
  29. //  Time_tToFileName(t,&ft);      
  30. //  FileTimeToSystemTime( &ft, pst );  
  31.   
  32.     //另一种实现  
  33.     tm *m=localtime(&t);  
  34.     TmToSystemTime(*m,pst);  
  35. }  
  36. void TimeConvert::SystemTimeToTime_T(SYSTEMTIME *st, time_t *pt )  
  37. {    
  38.     FILETIME ft;  
  39.     SystemTimeToFileTime( st, &ft);   
  40.     FileTimeToTime_t(&ft,pt);  
  41. }  
  42.   
  43. void TimeConvert::FileTimeToTime_t(const FILETIME  *ft,  time_t  *t)  
  44. {  
  45.     LONGLONG  ll;     
  46.     ULARGE_INTEGER ui;    
  47.     ui.LowPart=ft->dwLowDateTime;    
  48.     ui.HighPart=ft->dwHighDateTime;        
  49.     ll=(ft->dwHighDateTime<<32)+ft->dwLowDateTime;        
  50.     *t=(DWORD)((LONGLONG)(ui.QuadPart- 116444736000000000) /10000000);  
  51. }  
  52.   
  53. void TimeConvert::SystemTimeTOTm(const SYSTEMTIME &st,tm*t)  
  54. {  
  55.     tm gm= {st.wSecond, st.wMinute, st.wHour, st.wDay, st.wMonth-1, st.wYear-1900, st.wDayOfWeek, 0, 0};  
  56.     memcpy(t,&gm,sizeof(tm));  
  57. }  
  58. void  TimeConvert::TmToSystemTime(const tm &t,SYSTEMTIME *st)  
  59. {  
  60.     SYSTEMTIME s={1900 + t.tm_year,1 + t.tm_mon,t.tm_wday,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec,0};  
  61.     memcpy(st,&s,sizeof(SYSTEMTIME));  
  62. }  
  63.   
  64. void TimeConvert::Time_tToTm(time_t t,tm *_t)  
  65. {  
  66.     tm *tt=localtime(&t);  
  67.     memcpy(_t,tt,sizeof(tm));  
  68. }  
  69.   
  70. void TimeConvert::TmToTime_t(tm &_t,time_t &t)  
  71. {  
  72.     t=mktime(&_t);  
  73. }  
  74. void TimeConvert::Time_tToFileName(time_t t,FILETIME *ft)  
  75. {  
  76.     LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;  
  77.     ft->dwLowDateTime = (DWORD) ll;  
  78.     ft->dwHighDateTime = (DWORD)(ll >> 32);      
  79. }  
  80. void TimeConvert::FileTimeToTm(const FILETIME *ft,tm *t)  
  81. {  
  82.     time_t tm;  
  83.     FileTimeToTime_t(ft,&tm);  
  84.     Time_tToTm(tm,t);  
  85. }  
  86. void TimeConvert::TmToFileTime(tm &t,FILETIME *ft)  
  87. {  
  88.     time_t tm;  
  89.     TmToTime_t(t,tm);  
  90.     Time_tToFileName(tm,ft);  
  91. }  
  92. void TimeConvert::SystemTimeToFileTime(const SYSTEMTIME*pst,FILETIME *pft )  
  93. {  
  94.     ::SystemTimeToFileTime(pst,pft);  
  95. }  
  96. void TimeConvert::TimeFormat(char *dest,int length,const char *format,const tm*t)//@param:length 为dest长度-1  
  97. {  
  98.     strftime(dest,length,format,t);  
  99. }  
  100. /* 
  101.  
  102. 这关系太TMD乱了吧.....晕了 
  103.  
  104. 后记总结: 
  105. systemtime与filetime可以通过函数直接转化:FileTimeToSystemTime 和SystemTimeToFileName; 
  106. tm和time_t也可以直接转化:localtime()和mktime(); 
  107. 其他转化需要通过中间步骤 
  108. Sytemtime和tm有些类似,可以通过加减转化(PS:画个图之后,更好理解) 
  109. */ 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值