在 VBA 中更改或添加时间到日期

Mat*_*ett 3 outlook datetime vba date datetime-format

我正在处理 Outlook 的 VBA 项目。该项目正在查看日历约会,并将它们与从 SQL 数据库中提取并存储在日期变量中的日期进行比较。

目前,当日期从 SQL 数据库中出来时,它们没有任何时间组件,但我想向其中添加一个。

例如,SQL 查询中出现“07/03/2018”,我希望能够将其设置为“07/03/2018 09:00:00”以及一天中的各个其他时间。

有没有一种方法可以做到这一点,而无需将日期变量转换为字符串,而只需在末尾添加时间?这是因为我希望能够在程序稍后的变量上使用基于日期的函数,例如 DateAdd 等。

ash*_*awg 7

有很多方法可以将日期和时间添加在一起。

\n\n

这是我的一些想法:

\n\n
Sub examples()\n\n    \'store an example date\n    Dim dt As Date\n    dt = CDate("March 7, 2018")\n\n    \'now to add 9 hours:\n    Debug.Print dt + (9 / 24)\n\n    \'or, using DateAdd:\n    Debug.Print DateAdd("h", 9, dt)\n\n    \'or, add a time:\n    Dim tm As Date\n    tm = CDate("9:00 am")\n    Debug.Print dt + tm\n\n    \'or, as text:\n    Dim str As String\n    str = Format(dt, "mmm d, yyyy")\n    str = str & " 9:00 am"\n    Debug.Print CDate(str)\n\n    \'or, with TimeValue:\n    Debug.Print dt + TimeValue("9:00")\n\n    \'or, get extract the date from a datettime and add a different time:\n    Debug.Print DateValue(Now()) + TimeValue("9:00")\n\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n\n

哪种方法最好取决于您到底想用它做什么。

\n\n
\n\n

日期只是数字

\n\n

在 Excel 和 VBA 中,日期(或 DateTimes)只是从以下位置开始的数字

\n\n
\n

“1900 年 1 月 0 日”午夜

\n
\n\n

...并且增加了1 per day.

\n\n
1 = January 1, 1900, 00:00:00 (00:00 = midnight)\n2 = January 2, 1900, 00:00:00\n\n43166 = March 7, 2018\n
Run Code Online (Sandbox Code Playgroud)\n\n

需要在 1900 年 1 月 2 日上午 9:00 到达吗?

\n\n
    \n
  • 1小时是一天的24分之一。

  • \n
  • \xe2\x88\xb4 9:00 am= (9 \xc3\xb7 24)=0.375

  • \n
  • \xe2\x88\xb4 2.375=January 2, 1900 9:00 am

  • \n
\n\n

相似地:

\n\n
    \n
  • \xe2\x88\xb4 9:00 pm= (18 \xc3\xb7 24)=0.875

  • \n
  • \xe2\x88\xb4 2.875=January 2, 1900 9:00 pm

    \n\n

    上午 6:00 = 0.25(\xc2\xbc 日)\n中午 = 0.5(\xc2\xbd 日)\n下午 6:00 = 0.75(\xc2\xbe 日)

    \n\n

    1 小时 \xe2\x89\x88 0.417\n1 分钟 \xe2\x89\x88 0.000695\n1 秒 \xe2\x89\x88 0.000011574

  • \n
\n\n

距离夏天还有多少天?

\n\n
Today          =   43166  (March 7, 2018)\nSummer begins  =   43272  (June 21, 2018)  [Northern Hemisphere]\n\n43272 - 43166  =   106 days\n
Run Code Online (Sandbox Code Playgroud)\n\n

距离夏天还有多少小时?

\n\n
106 \xc3\x97 24       =   2544 hours\n
Run Code Online (Sandbox Code Playgroud)\n\n

……你明白了。 \xe2\x98\xba

\n\n
\n\n

Excel 中可能的最大时间

\n\n
Friday, December 31, 9999 23:59:59  =  2958465.99998843\n
Run Code Online (Sandbox Code Playgroud)\n\n

(...所以不要为那个周末制定任何计划。)

\n\n
\n\n

更多信息:

\n\n\n