Tools - 日期时间工具类
cToolsDateTime - 日期时间工具
概述
提供 Unix 时间戳、ISO8601 格式、日期格式化等功能。
时间戳获取
GetUnixTimestamp
获取当前时间的 Unix 时间戳(13位毫秒)。
vb
Public Function GetUnixTimestamp() As Currency返回值:
13位 Unix 时间戳(毫秒级)。
示例:
vb
Dim Ts As Currency
Ts = VBMAN.ToolsDateTime.GetUnixTimestamp()
Debug.Print Ts ' 输出: 1715904000000GetIso8601Timestamp
获取 ISO8601 格式的时间戳(UTC 时间)。
vb
Public Function GetIso8601Timestamp() As String返回值:
格式:YYYY-MM-DDTHH:MM:SSZ
示例:
vb
Dim Iso As String
Iso = VBMAN.ToolsDateTime.GetIso8601Timestamp()
Debug.Print Iso ' 输出: 2024-05-17T08:00:00ZGetUtcTimestamp
获取 UTC 时间戳(北京时间转 UTC)。
vb
Public Function GetUtcTimestamp() As String返回值:
格式:YYYY-MM-DDTHH:MM:SSZ
说明:
- 基于当前系统时间减去8小时计算
- 适合需要 UTC 时间的场景
示例:
vb
Dim Utc As String
Utc = VBMAN.ToolsDateTime.GetUtcTimestamp()
Debug.Print Utc ' 输出: 2024-05-17T08:00:00Z日期判断与格式化
IsDatePast
判断日期是否已经过去。
vb
Public Function IsDatePast(targetDate As Variant) As Boolean参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
targetDate | Variant | 目标日期(字符串或日期类型) |
返回值:
True- 目标日期已过去False- 目标日期未到"Invalid Date Format"- 无效的日期格式
示例:
vb
' 检查过期
If VBMAN.ToolsDateTime.IsDatePast("2023-12-31") Then
Debug.Print "已过期"
End If
' 检查许可证
If VBMAN.ToolsDateTime.IsDatePast(LicenseExpiryDate) Then
MsgBox "许可证已过期,请续费"
End IfFormatDateTime
格式化日期时间为指定格式。
vb
Public Function FormatDateTime(Optional ByVal strFormat As String = "yyyy-mm-dd hh:nn:ss", Optional ByVal varDate As Variant) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
strFormat | String | 格式字符串(默认 "yyyy-mm-dd hh:nn:ss") |
varDate | Variant | 要格式化的日期,省略则使用当前时间 |
常用格式:
| 格式 | 输出示例 |
|---|---|
yyyy-mm-dd hh:nn:ss | 2024-05-17 14:30:00 |
yyyy年mm月dd日 | 2024年05月17日 |
dd/mm/yyyy | 17/05/2024 |
hh:nn:ss AM/PM | 02:30:00 PM |
yyyy-mm-dd | 2024-05-17 |
示例:
vb
' 当前时间
Debug.Print VBMAN.ToolsDateTime.FormatDateTime() ' 2024-05-17 14:30:00
' 指定时间
Debug.Print VBMAN.ToolsDateTime.FormatDateTime("yyyy年mm月dd日", "2024-5-17")
' 输出: 2024年05月17日
' 格式化当前时间
Debug.Print VBMAN.ToolsDateTime.FormatDateTime("今天是 yyyy年m月d日")
' 输出: 今天是 2024年5月17日cTimeUse - 耗时统计工具
概述
简单的代码执行耗时统计工具,基于 GetTickCount API。
方法
Start
开始计时。
vb
Public Sub Start()说明:
- 记录当前时间戳作为起始时间
- 在需要统计耗时的代码前调用
示例:
vb
' 开始计时
VBMAN.TimeUse.Start()
' 执行一些操作
For i = 1 To 1000000
' 一些计算
Next i
' 显示耗时
Debug.Print VBMAN.TimeUse.Show()Show
显示耗时。
vb
Public Function Show(Optional Txt As String = "耗时:{*} 毫秒") As Variant参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Txt | String | 输出格式,* 会被替换为耗时毫秒数 |
返回值:
格式化后的字符串。
示例:
vb
' 开始计时
VBMAN.TimeUse.Start()
' 执行一些操作
For i = 1 To 1000000
' 一些计算
Next i
' 显示耗时
Debug.Print VBMAN.TimeUse.Show() ' 输出: 耗时:50 毫秒
' 自定义格式
Debug.Print VBMAN.TimeUse.Show("操作完成,耗时 {*} ms") ' 输出: 操作完成,耗时 50 ms
Debug.Print VBMAN.TimeUse.Show("用时: {*}ms") ' 输出: 用时: 50ms完整示例
vb
Private Sub PerformanceTest()
' 测试循环性能
VBMAN.TimeUse.Start()
Dim i As Long
Dim Sum As Double
For i = 1 To 1000000
Sum = Sum + i
Next i
Debug.Print "累加结果: " & Sum
Debug.Print VBMAN.TimeUse.Show("100万次循环耗时 {*} 毫秒")
' 测试字符串拼接
VBMAN.TimeUse.Start()
Dim str As String
For i = 1 To 10000
str = str & "x"
Next i
Debug.Print VBMAN.TimeUse.Show("字符串拼接耗时 {*} 毫秒")
' 测试数组操作
VBMAN.TimeUse.Start()
Dim Arr(1 To 10000) As String
For i = 1 To 10000
Arr(i) = "Item" & i
Next i
Debug.Print VBMAN.TimeUse.Show("数组操作耗时 {*} 毫秒")
End SubcTimer / cTimers - 定时器类
概述
提供基于 Windows API 的高精度定时器功能。
cTimer- 单个定时器cTimers- 定时器集合,支持多个定时器
cTimer 属性
| 属性 | 类型 | 说明 |
|---|---|---|
Interval | Long | 间隔时间(毫秒) |
Enabled | Boolean | 是否启用 |
Tag | Variant | 用户自定义数据 |
cTimer 方法
EnableTimer
启用定时器并设置间隔。
vb
Sub EnableTimer(mInterval As Long)Enable / Disable
启用/禁用定时器。
vb
Sub Enable()
Sub Disable()Reset
重置定时器(重新启动)。
vb
Sub Reset()cTimer 用法
vb
Private WithEvents Tmr As cTimer
Private Sub Form_Load()
Set Tmr = New cTimer
Tmr.Interval = 1000 ' 1秒
Tmr.Enabled = True
End Sub
Private Sub Tmr_Timer()
Debug.Print "每秒触发一次"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Tmr.Enabled = False
Set Tmr = Nothing
End SubcTimers 用法(多定时器)
vb
Private WithEvents Timers As cTimers
Private Sub Form_Load()
Set Timers = New cTimers
' 添加两个定时器
Timers.Add
Timers.Add
' 设置第一个定时器
Timers(1).Interval = 1000
Timers(1).Enabled = True
' 设置第二个定时器
Timers(2).Interval = 5000
Timers(2).Enabled = True
End Sub
Private Sub Timers_Timer(ByVal Index As Integer)
Debug.Print "定时器 " & Index & " 触发"
Select Case Index
Case 1
Debug.Print "每秒任务"
Case 2
Debug.Print "每5秒任务"
End Select
End Sub属性
| 属性 | 说明 |
|---|---|
Interval | 间隔时间(毫秒) |
Enabled | 是否启用 |
Tag | 用户自定义数据 |
Index | 在集合中的索引(cTimers 用) |
完整示例
vb
Private Sub DateTimeDemo()
' ===== 时间戳 =====
' 获取 Unix 时间戳
Dim UnixTs As Currency
UnixTs = VBMAN.ToolsDateTime.GetUnixTimestamp()
Debug.Print "Unix时间戳: " & UnixTs
' 获取 ISO8601 时间戳
Dim IsoTime As String
IsoTime = VBMAN.ToolsDateTime.GetIso8601Timestamp()
Debug.Print "ISO8601: " & IsoTime
' ===== 日期格式化 =====
' 各种格式
Debug.Print VBMAN.ToolsDateTime.FormatDateTime()
Debug.Print VBMAN.ToolsDateTime.FormatDateTime("yyyy年mm月dd日")
Debug.Print VBMAN.ToolsDateTime.FormatDateTime("hh:nn:ss")
' ===== 日期判断 =====
' 检查过期
Dim ExpiryDate As String
ExpiryDate = "2024-12-31"
If VBMAN.ToolsDateTime.IsDatePast(ExpiryDate) Then
Debug.Print "已过期"
Else
Debug.Print "未过期"
End If
' ===== 性能测试 =====
VBMAN.TimeUse.Start()
' 模拟耗时操作
Dim i As Long
For i = 1 To 100000
DoEvents
Next i
Debug.Print VBMAN.TimeUse.Show("操作完成,耗时 {*} 毫秒")
End Sub应用场景
| 场景 | 使用方法 |
|---|---|
| API 请求 | GetUnixTimestamp() / GetIso8601Timestamp() |
| 日志记录 | FormatDateTime() |
| 许可证检查 | IsDatePast() |
| 性能测试 | TimeUse.Start() + TimeUse.Show() |
| 定时任务 | cTimer / cTimers |
| 倒计时 | GetUnixTimestamp() 对比 |