You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IBM Notes中正确收集DateTime对象到数组?值引用问题求解

解决IBM Notes中DateTime数组的引用问题

嘿,这真的不是什么新手专属问题——我见过不少资深Notes开发者都踩过这个引用类型的坑!

问题的核心在于:IBM Notes里的DateTime是引用类型,而不是值类型。你之前的代码应该是一直在修改同一个DateTime对象,然后把这个对象的引用重复添加到数组里。最后当循环结束时,这个唯一的DateTime对象被改成了最后一天的日期,所以数组里所有元素(其实都是指向同一个对象的引用)看起来全是最后那个日期。

简洁的解决方法:每次循环创建新的DateTime实例

你只需要在每次循环时,复制当前日期的独立副本,再把这个副本加入数组,而不是直接添加原对象的引用。用Duplicate()方法就能轻松做到这一点,看下面的示例代码:

Dim startDate As New NotesDateTime("02/22/2018")
Dim endDate As New NotesDateTime("02/25/2018")
Dim dateArray As Variant
Redim dateArray(0)
Dim tempDate As NotesDateTime

Do While startDate.TimeDifference(endDate) <= 0
    ' 关键步骤:创建当前日期的独立副本
    Set tempDate = startDate.Duplicate()
    ' 将副本加入数组
    dateArray(Ubound(dateArray)) = tempDate
    Redim Preserve dateArray(Ubound(dateArray)+1)
    ' 修改原日期对象,用于下一次循环
    Call startDate.AdjustDay(1)
Loop

' 移除数组末尾的空元素(可选,根据你的需求调整)
If Ubound(dateArray) > 0 Then
    Redim Preserve dateArray(Ubound(dateArray)-1)
End If

原理说明

Duplicate()方法会生成一个全新的DateTime对象,它的初始值和原对象完全一致,但两者是独立的引用——后续修改原startDate对象,不会影响已经存入数组的tempDate副本。这样数组里的每个元素都是不同的DateTime实例,各自保存着循环过程中对应的日期。

你也可以用New NotesDateTime(startDate.LSLocalTime)来创建新实例,效果和Duplicate()是一样的,选你觉得顺手的方式就行。

内容的提问来源于stack exchange,提问作者Uwe J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:05