我需要将这些日期格式化为 yyyy/mm/dd 以查询 MySQL 数据库 - 查看这两个语句,您会认为它们会产生相同的结果,对吗?

dateOne = Format(#9/1/2013#, "yyyy/mm/dd")
dateTwo = Format(#9/1/2013#, "yyyy/mm/dd")

dateOne 现在等于 2013/09/01 ,而 dateTwo 等于 9/1/2013。我疯了吗?这发生在我的脚本的最开始,我有 Option Explicit 并且我知道它正在保存到正确的变量中..
Sub main()

Dim dateOne, dateTwo As Date
Dim answer As Integer
answer = MsgBox("Would you like to generate a Transfer Report?", vbYesNoCancel + vbQuestion)
If answer <> 6 Then Exit Sub

'dateOne = InputBox("Input the first (earliest) date in mm/dd/yyyy format")
'dateTwo = InputBox("Input the second (latest) date in mm/dd/yyyy format")

dateOne = Format(#9/1/2013#, "yyyy/mm/dd")

dateTwo = Format(#9/1/2013#, "yyyy/mm/dd")

现在 dateOne 是 2013/09/01,而 dateTwo 是 9/1/2013。

我最初在不同的日期使用它们,以查询范围 - 在将我的头撞到我的键盘之前,为了绝对确保我在两者上以相同的方式执行该功能,我复制了 dateOne 中的文本,将其粘贴了一行,并将变量更改为 dateTwo。完全相同的命令,分开执行两行,产生不同的结果。脚本快完成了,但是它如何,为什么,它正在做它正在做的事情?

也许我可以要求用户以 yyyy/mm/dd 格式输入它,但我真的很想知道为什么会这样。任何人都可以帮忙吗?

最佳答案

你的例行程序有两个问题,它们结合起来产生了这些看似不合逻辑的结果:

Sub main()

Dim dateOne, dateTwo As Date
Dim answer As Integer
.
.
.
dateOne = Format(#9/1/2013#, "yyyy/mm/dd")
dateTwo = Format(#9/1/2013#, "yyyy/mm/dd")

首先, Format(..) 创建了一个 Variant String ,但您似乎将其视为创建了 Date

其次这一行: Dim dateOne, dateTwo As Date 而不是 声明两个 Date 变量,正如您在编写它时可能相信的那样。相反,它声明 dateTwo 是一个 Date 变量,但它声明 dateOne 是一个 Variant(默认),因为你没有做任何其他事情。要使它们都成为日期,您需要 Dim dateOne As Date, dateTwo As Date

因此,将这两个事实放在一起,dateOne 发生的事情是 Format 按照您的意图生成字符串,然后由于目标变量是 Variant,将其作为 Variant String 存储在那里。

然而,dateTwo 的工作方式不同,因为它首先按照您的指示生成日期字符串 ("2013/09/01"),但随后看到您告诉它将 String 分配给不同数据类型的 Date,所以然后它将字符串 转换回 为日期,但使用您本地系统的 NLS 设置来确定如何解释(在您的情况下)导致月和日数字被交换的字符串。

清除?

10-05 21:12