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 //......

 

posted @ 2021-07-29 10:38  jqdy  阅读(63)  评论(0编辑  收藏  举报