首页 > 解决方案 > 日期(现在)显示 1900 年 1 月?

问题描述

无论出于何种原因,每次我尝试在 VBA 中使用 Day(Now) 函数时,它都会一直显示“1/9/1900”。Date 函数显示正确,所以我不确定这里的问题是什么。

Sub Test()

Dim datDay As Date

datDay = Day(Now)
MsgBox datDay

End Sub

这是错误的图像。

标签: excelvba

解决方案


Day将是一个介于 1 和 31 之间的整数,具体取决于DateTime.Now函数返回的日期的“日”部分。

日期的存储方式,它们本质上是Double值,整数部分是天数,小数部分是一天中的时间。

Debug.Print Format(CDate(0), "yyyy-mm-dd")

输出:1899-12-30

我们是 6 月 10 日,因此日期值10对应于 1900 年 1 月 9 日。

您希望将 、 和 函数返回的值存储DayMonth整数Year变量中Long;不是Date

Dim datDay As Long
datDay = DateTime.Day(DateTime.Date) ' datDay is 10 because DateTime.Date is 2019-06-10.

注意:虽然不合格Day的 , Date, Month, 和Year(以及其他)函数工作得很好,但最好用它们在 ( VBA.DateTime) 中声明的模块来限定它们,以避免潜在的混淆歧义,例如Date,两者都是属性的名称DateTime模块,也是一种数据类型(Dim foo As Date),两者的含义截然不同。


推荐阅读