API 实现类似于 C# DateTime 的类
本文链接: https://www.cnblogs.com/jqdy/p/15073952.html
C# 的 DateTime 类使用起来非常方便,std 可以方便的实现类似的功能,但是会占用稍大的空间,在服务程序的编制中稍显不足。
下面,利用 windows API 实现了一个类,可以实现系统时间字符串的输出。
1 ///////////////////////////////////////////////////////////////////////////////////// 2 // 说明:基于 API 实现类似于C#的DateTime类 3 // 1. 宏 DATETIME_STRING_BUFFER_SIZE 定义了形如 2020.01.01 00:00:00.000 字符串的内存占用。 4 // 2. 强制枚举 Format 定义了输出何种字符串。 5 ///////////////////////////////////////////////////////////////////////////////////// 6 #include <windows.h> 7 8 // 时间字符串缓冲区大小(含末尾\0) 9 #define DATETIME_STRING_BUFFER_SIZE 25 10 11 // 类似于 C# 中DateTime的系统时间类 12 class DateTime 13 { 14 15 private: 16 17 SYSTEMTIME m_stTime; // 系统时间 18 19 TCHAR m_pszTimeStr[DATETIME_STRING_BUFFER_SIZE]; 20 21 public: 22 23 enum class Format :UCHAR// 时间字符串格式枚举 24 { 25 YYYY_MM_DD_hh_mm_ss, //形如:2020.01.01 01:01:01 26 YYYY_MM_DD_hh_mm_ss_mmm //形如:2020.01.01 01:01:01.001 27 }; 28 29 DateTime() 30 { 31 GetLocalTime(&m_stTime); 32 } 33 34 ~DateTime(); 35 36 /////////////////////////////////////////////// 37 // 更新时间为当前的系统时间 38 // 返回: 类引用 39 /////////////////////////////////////////////// 40 DateTime& Now() 41 { 42 GetLocalTime(&m_stTime); 43 return *this; 44 } 45 46 /////////////////////////////////////////////// 47 // 名称: 输出时间字符串 48 // 参数: 49 // format: 时间字符串格式枚举 50 // 返回: 时间字符串指针 51 /////////////////////////////////////////////// 52 PTSTR ToString(Format format) 53 { 54 PCTSTR pszFormat[] = 55 { 56 TEXT("%04d.%02d.%02d %02d:%02d:%02d"), 57 TEXT("%04d.%02d.%02d %02d:%02d:%02d.%03d") 58 }; 59 60 PCTSTR pszSelect = nullptr; 61 62 switch (format) 63 { 64 case DateTime::Format::YYYY_MM_DD_hh_mm_ss: 65 pszSelect = pszFormat[0]; 66 break; 67 case DateTime::Format::YYYY_MM_DD_hh_mm_ss_mmm: 68 pszSelect = pszFormat[1]; 69 break; 70 } 71 72 StringCchPrintf( 73 m_pszTimeStr, 74 DATETIME_STRING_BUFFER_SIZE, 75 pszSelect, 76 m_stTime.wYear, 77 m_stTime.wMonth, 78 m_stTime.wDay, 79 m_stTime.wHour, 80 m_stTime.wMinute, 81 m_stTime.wSecond 82 ); 83 84 return m_pszTimeStr; 85 } 86 };
使用时:
1 // ...... 2 DateTime dt; 3 PTSTR pszTimeStr = dt.Now().ToString(DateTime::Format::YYYY_MM_DD_hh_mm_ss_mmm); 4 //......