oracle 日期相减得天数_VBA学习笔记43:日期与时间

e760b6356ffff488085f4a445a9f0f87.png

学习资源:《Excel VBA从入门到进阶》第43集 by兰色幻想


一、日期返回

1 返回当前日期、时间(指本机系统设置的日期和时间)

(1)返回当前日期 Date

Debug.Print Date

返回结果:2020/5/10

(2)返回当前时间 Time

Debug.Print Time

返回结果:17:09:15

(3)返回当前日期+时间 Now

Debug.Print Now

返回结果:2020/5/10 17:09:15

2 格式化显示日期 Format

其实Format在上一节也讲过,就直接上例子啦。

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

返回结果:2020-05-10

Debug.Print Format(Now, "yyyy年mm月dd日")

返回结果:2020年05月10日

Debug.Print Format(Now, "yyyy年mm月dd日 h:mm:ss")

返回结果:2020年05月10日 17:34:24

Debug.Print Format(Now, "d-mmm-yy")

返回结果:10-May-20(mmm表示英文月份的简称)

Debug.Print Format(Now, "d-mmmm-yy")

返回结果:10-May-20(mmmm是表示英文月份的全称,因为May的简写和全称是一样的,所以这个返回结果和上面没区别,但如果是四月,mmm就会显示Apr,mmmm显示April。)

Debug.Print Format(Now, "aaaa")

返回结果:星期日

Debug.Print Format(Now, "ddd")

返回结果:Sun(ddd表示英文星期前三个字母)

Debug.Print Format(Now, "dddd")

返回结果:Sunday(dddd表示英文星期完整显示)

3 根据年月日返回日期 DateSerial

VBA.DateSerial(yyyy, mm, dd)
Debug.Print VBA.DateSerial(2011, 10, 1)

返回结果:2011/10/1

4 根据小时分种返回时间

VBA.TimeSerial(hh, nn, ss)
Debug.Print VBA.TimeSerial(1, 2, 1)

返回结果:1:02:01

5 返回年月日小时分秒

Sub t5()

Dim d
d = "2011-10-28 01:10:03"

Debug.Print Year(d) & "年"
Debug.Print Month(d) & "月"
Debug.Print Day(d) & "日"
Debug.Print Hour(d) & "时"
Debug.Print VBA.Minute(d) & "分"
Debug.Print Second(d) & "秒"

End Sub

ceef3294f63d7643dbdb133d31c62a1b.png

二、日期和时间计算

1 计算两个日期相隔天数,月数,年数,小时,分种,秒

DateDiff()函数返回两个日期之间的时间。

DateDiff( interval, date1, date2 [ , firstdayofweek [ , firstweekofyear ]] )
interval 时间间隔类型,必填。比如年"yyyy",月"m",天"d"等等,要注意的是分钟不是minute的m,而是用n,为了和月区分。
date1, date2 间隔的起始时间和结束时间,必填。
Firstdayofweek 可选,指定一个星期的第一天的常数。 如果未予指定, 则以星期日为第一天。
firstweekofyear 可选,指定一年的第一周的常数。 如果未予指定, 则以包含1 月 1 日的星期为第一周。

示例:

Sub tt1()

Dim d1, d2 As Date
d1 = #11/21/2011#
d2 = #12/1/2011#

    Debug.Print "相隔" & (d2 - d1) & "天"
    Debug.Print "相隔" & DateDiff("d", d1, d2) & "天"
    Debug.Print "相隔" & DateDiff("m", d1, d2) & "月"
    Debug.Print "相隔" & DateDiff("yyyy", d1, d2) & "年"
    Debug.Print "相隔" & DateDiff("q", d1, d2) & "季"
    Debug.Print "相隔" & DateDiff("w", d1, d2) & "周"
    Debug.Print "相隔" & DateDiff("h", d1, d2) & "小时"
    Debug.Print "相隔" & DateDiff("n", d1, d2) & "分种"
    Debug.Print "相隔" & DateDiff("s", d1, d2) & "秒"

End Sub

e5060aea7f968961dd3f6ba19e6504ea.png
示例显示结果

2 计算两时间的差 Timer - t

Timer 函数:返回一个 Single,代表从午夜开始到现在经过的秒数。

个人认为加粗的那三行代码,基本可以直接背下来套用。

Sub tt2()

Dim t, x
t = Timer                   '把系统的时间赋给变量t

For x = 1 To 10000000       '让x从1到10000000循环
Next x

Msgbox Timer - t       '利用消息框显示现在的时间减去前面设置的时间,得到代码运行时间
                       '或者写成Debug.Print Timer - t在立即窗口显示也行。
End Sub

cd5bed4e28570e2b6945a37e2a309c30.png
运行时间显示

3 日期时间加减

DateAdd()函数

DateAdd(interval, number, date)
interval 时间间隔类型,必填。比如年"yyyy",月"m",天"d"等等,要注意的是分钟不是minute的m,而是用n,为了和月区分。
number 相加减数,必填。正数表示相加,得到未来的日期;负数表示相减。
date 必要,计算日期的起始值。

示例:

 Sub tt3()

Dim d1, d2 As Date
d1 = "2001-10-1 00:00:00"

Debug.Print VBA.DateAdd("d", 10, d1)           '加上10天
Debug.Print VBA.DateAdd("m", 10, d1)           '加上10个月
Debug.Print VBA.DateAdd("yyyy", 10, d1)        '加上10年
Debug.Print VBA.DateAdd("yyyy", -10, d1)       '减少10年
Debug.Print VBA.DateAdd("h", 10, d1)           '加上10小时后的时间
Debug.Print VBA.DateAdd("n", 10, d1)           '加上10分种后的时间
Debug.Print VBA.DateAdd("s", 10, d1)           '加上10秒后的时间

End Sub

299c5045305ae1f3fe9a7b4d0382e925.png

三、计时器 ontime

使用ontime函数在指定时间运行程序。

Application.OnTime(EarliestTime、 Procedure、 LatestTime、 Schedule)

667bd39ffc1f6b2c5300f90e9ecfb22f.png
这里直接用了office的帮助文件啦,它归纳得很好。

例:在0点运行程序A。

Sub ttt1()
Application.OnTime TimeValue("00:00:00"), "A"
End Sub

使用Now + TimeValue(time)可安排在一段特定时间 (从现在开始计数) 开始运行的操作。使用 TimeValue(time) 可安排某个过程只运行指定的时间。

例:两秒之后运行A程序。

Sub ttt2() 
Application.OnTime Now + TimeValue("00:00:02"), "A"
End Sub

但这个程序有个bug,就是容易陷入死循环,因为永远都有"两秒后"。

所以得使用下面这行代码来转让控制权,允许别的程序一起运行,来打破死循环。

x = DoEvents

例:制作时钟。

Sub 时间显示()

Dim x

If k = 1 Then
    k = 0
    End
End If

Range("a1") = Format(Now, "h:mm:ss")

Application.OnTime Now + TimeValue("00:00:01"), "时间显示"

x = DoEvents

End Sub

d4be2669a229942c6cabb12c4a506ab9.gif
运行程序展示,想时钟一样持续运行。

如果想结束的话,就运行以下程序,让k=1.

Sub 结束时间显示()
   k = 1
End Sub

ae9292f494122700a2a7b322901c6ff4.gif
不想时钟一直显示了,按下停止按钮,停止代码运行,让k=1

以上~晚安。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值