Skip to content

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  ' 输出: 1715904000000

GetIso8601Timestamp

获取 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:00Z

GetUtcTimestamp

获取 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

参数:

参数名类型说明
targetDateVariant目标日期(字符串或日期类型)

返回值:

  • 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 If

FormatDateTime

格式化日期时间为指定格式。

vb
Public Function FormatDateTime(Optional ByVal strFormat As String = "yyyy-mm-dd hh:nn:ss", Optional ByVal varDate As Variant) As String

参数:

参数名类型说明
strFormatString格式字符串(默认 "yyyy-mm-dd hh:nn:ss")
varDateVariant要格式化的日期,省略则使用当前时间

常用格式:

格式输出示例
yyyy-mm-dd hh:nn:ss2024-05-17 14:30:00
yyyy年mm月dd日2024年05月17日
dd/mm/yyyy17/05/2024
hh:nn:ss AM/PM02:30:00 PM
yyyy-mm-dd2024-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

参数:

参数名类型说明
TxtString输出格式,* 会被替换为耗时毫秒数

返回值:

格式化后的字符串。

示例:

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 Sub

cTimer / cTimers - 定时器类

概述

提供基于 Windows API 的高精度定时器功能。

  • cTimer - 单个定时器
  • cTimers - 定时器集合,支持多个定时器

cTimer 属性

属性类型说明
IntervalLong间隔时间(毫秒)
EnabledBoolean是否启用
TagVariant用户自定义数据

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 Sub

cTimers 用法(多定时器)

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() 对比

VB6及其LOGO版权为微软公司所有