1.  > 国际教育

深入解析VB/VBA/VBS核心函数:DateAdd等日期处理技巧

大家好,今天小编来为大家解答以下的问题,关于深入解析VB/VBA/VBS核心函数:DateAdd等日期处理技巧,这个很多人还不知道,现在让我们一起来看看吧!

前言

在《VB/VBA/VBS内置函数有哪些?》中,从分类和具体名称上,给大家介绍了VB/VBA/VBS内置的函数集。前篇《VB/VBA/VBS内置函数系列之DateDiff》介绍了日期减法函数DateDiff的语法,参数说明,功能及应用场景。既然有时间减法函数,那自然也有时间加法函数,这就是本篇要讲的DateAdd函数。

笔者为何要先从时间函数开始讲这一些列函数呢?因为时间重要啊!想想卫星、空间站、火星探测器上天进行宇航活动,没有可靠的时间行么?相隔千万里,唯有时间可以成为同步的参考。尽管使用VB/VBA/VBS时,一般不需要原子钟那样的精度,甚至很多人对时间的概念都一知半解,但如果我们试着了解时间,就会发现:哇,原来时间也可以这么奇妙。

1、电子文档防伪,一个很有意思也很有商业价值的领域。知道有哪些实现方式么?VB/VBA/VBS能否实现一个高性价比的版本?

2、商业价值必须依附于时间来进行计量,投资回收期,投资回报率,销售利率等,无不是暗含时间因素。商业活动的开展,无不是在预与立中博弈,大如国家财政预算,小如企业收支预算。中外企业之间如何比较业绩(比如南亚国家)?外资企业如何与其外国股东沟通经营成果?中资企业在国外的投资经营又该如何评价?这些都离不开时间。

3、随着互联网的发展,这颗蓝色星球早已是地球村。抛开经贸金融往来,大家社交娱乐时,如何实现同步的呢?疫情期间,各国元首的视频会晤,又是如何保持有序的呢?

4、为何各大终端,如PC,关闭电源到下次开启时,时间却并未停止?像Windows这样的通用操作系统,也叫分时多任务操作系统,它又是如何协调大家一边听歌,一边写/看文档的呢?VB/VBA/VBS需不需要计时器呢?

所以,本篇在介绍DateAdd函数的同时,一并将其他相关时间函数,及相关概念做一个简要介绍。在后期的专题应用中,再结合具体例子,详细地来高端高端!

一、常见的日期函数

VB提供了一系列处理日期(时间)相关的内置函数,如年(Year)月(Month)日(Day)时(Hour)分(Minute)秒(Second)周(Week)当前时间(Now),当然还有CDateDateTimeTimerWeekday等函数。这些函数,几乎包含了处理日期时间的通用需求,也是大家经常使用的函数。但还有一些不常用的日期函数,笔者简要介绍如下:

1、时间分解函数

主要包括Date和Time函数,这两函数都是依据系统当前时间,前者获得日期部分,后者获得时间部分。习惯上,我们将时间分为日期和时间两部分,如“2021-11-22 17:07:25“。看过《知VBA的浮点数结构,更懂算力》的朋友(可点击查阅),应该就知道,Date类型实际为Double类型,而日期部分就是Double的整数部分,而时间就是Double的小数部分。

而看过《VB的整数,你真的了解?》的朋友(可点击查阅),应该就知道,在计算机中浮点类型也是整数,也就是说Double类型的Date,其实是个8字节整数。而VB/VBA/VBS是弱类型语言,这就意味着用户可以借助指针,将同一个内存中的数据,在整数、日期、双精度浮点数之间任意低成本转换,而Date和Time函数又可任取整数和小数部分参与代数计算。

这在很多巧妙的算法设计中,不仅堪用,而且性能也不低。这对于VB/VBA/VBS而言,是写出高质量代码的『硬菜』。笔者就曾在一款VB外壳中,利用该原理,将时间线和数据线,完美融合到了一起,让破壳者,不仅要处理数据,更要处理时间,可大幅拖延破壳的进度。

2、时间合成函数

主要包括DateSerial和TimeSerial,前者根据年月日合成1个Date类型的日期部分,后者根据时分秒合成1个Date类型的时间部分。在VB/VBA/VBS中暗含类型的自动转换,很多时候直接用字符串表示日期和时间,对于很多需要时间的函数而言,都是可以接受的。所以,这两函数在很多人看来没啥用处,与其分开写年月日,还不如直接用连字符串一起方便。

但在特定应用场景,尤其是在财经金融证券领域,这俩兄弟结合指针可将时间的灵活性发挥得超出很多人的想象。

3、时间属性提取函数

Date类型,不仅是Double,也不仅是内存中的8字节整数,那还有很多属性。常见的,年月日时分秒已是见怪不怪,也有对应的专项函数,想必诸多表格表姐们在Excel中用的熟了。那季、周、已过天数等属性,用的人就少了,毕竟大部分人除了自个兜儿的外,其实并不真正Care钱嘛!更何况不少人自个的兜儿,都还缝在管家婆身上的呢。

所以,金钱密集型行业的从业人员(如财经金融证券),才有更多机会使用到这些属性。比如国外不少地方,都是发日薪或周薪。国内企业管理上来之后,月报、季报、半年报,实时报、动态预算、各种考核等,都是有的。这时候,时间属性函数,就有妙用了。

二、DateAdd函数

1、函数功能

该函数为时间加法函数,可以在指定时间上加上指定单位的时间,如年月日时分秒,季,周等。

2、函数的定义(VB形式)

DateAdd(Interval As String,Number As Double,Date As Variant) As Variant

3、函数参数说明

Interval为Number参数的时间单位,具体为下图所示:

时间间隔单位

Number为要增加的时间量,单位由Interval指定。该参数为何为Double类型?

Date为指定的基准时间,不仅支持Date类型和Double类型表示的时间,也支持字符串表示的时间(如"1899-12-30 0:00:00")。

4、应用

该函数通常与DateDiff函数组合使用,可在时间轴上前进或后退,在时间轴一类的应用中非常方便。当然,也可以单独使用,如怎样获得系统的开机时间?如何获得指定年月的最后1天的日期?如何获得指定年第N天的日期?

三、时间的几个概念

相信大部分人就认得终端右下角或其他角落显示的时间,其实除了这个,还有磁盘文件的创建/访问/修改时间和系统时间。

大家都知道,地球是个球,还自个儿旋,所以有了白天和黑夜,更有了白天不懂夜的黑。因为这边是白天上班时间,那边却是午夜的鼾声四起,所以最近的中美领导人视频会晤的时间就很微妙。局是老拜登攒的,时间正好是我们早上上班时间,要知道美丽国那边的人,大部分人都洗洗睡了。所以,这个此时间非彼时间,谁在将就谁,就由你们说去吧。

正因为这样,才有了时区的概念,才有跨国倒时差的说法。随着近代天文地理的发展,跨区往来的日益频繁,亟需1个全球全局的时间计量,这便是UTC(协调世界时,又称世界统一时间、世界标准时间)。

但是,大家都不分场合地使用这个全球标准时间,就会导致传统时间概念的错乱。比如我们可以说我们在早上九十点视频会晤了老拜登,但美丽国人就不能这么说,否则就是睁眼瞎说。所以,为了配合各地实际生产生活,就有了本地时间,甚至还有夏令时。也就是说,实际应用中,时间各是各的,有北京时间,也有东京时间,更有伦敦时间。

大家各位屏幕上显示的时间,基本就是指本地时间(也即北京时间)。但是,这么多本地时间,如何切换到全球时间呢?所以,就有了格林尼治时间,其作为起点,按时区进行时差。这样本地时间和UTC之间进行随意切换了。

使用本地时间,在一定时区范围内比较方便,但超出太多时区就容易导致混乱。比如,东北天亮得早,也黑的早,以前有东北同学说他们哪儿下午3点过就放学,4点吃晚饭都算晚的了,当时对于笔者这个南方人还感觉挺不可思议的。

所以,在很多场合,尤其是计算机领域,真正的时间都是使用UTC时间。比如磁盘里的文件时间,网站上的时间等。

用户评论

反正是我

学习这些日期函数真的太有用啦!开发报表的时候经常用到。

    有7位网友表示赞同!

未来未必来

感觉编程学起来越来越有意思了,能学会这么多实用的工具。

    有5位网友表示赞同!

殃樾晨

DateAdd这个函数真是太巧妙了,可以算出很多种日期变化呢。

    有18位网友表示赞同!

不要冷战i

以前总是手动计算日期差额,现在有了内置函数简直效率倍增!

    有20位网友表示赞同!

大王派我来巡山!

不知道有没有讲DateDiff这类函数的教程?我也想试试这方面的用法。

    有7位网友表示赞同!

非想

学习VB/VBA 真是越来越懂了,这个系列课我一定学完!

    有11位网友表示赞同!

淡抹丶悲伤

这些日期函数用的到的场景很多,以后工作中肯定派上用场。

    有17位网友表示赞同!

肆忌

感觉现在编程比以前更便捷了,内置函数真的太方便了。

    有6位网友表示赞同!

回忆未来

学习编程还是要坚持练习,才能熟能生巧。

    有17位网友表示赞同!

焚心劫

希望还能学习到更多VB/VBA的实用的技巧和方法。

    有7位网友表示赞同!

oО清风挽发oО

看完这个标题,感觉自己也要开始学一下 VB/VBA 啦!

    有12位网友表示赞同!

安之若素

日期处理是编程中常见的难题,了解这些函数能让我更快速完成任务。

    有19位网友表示赞同!

千城暮雪

学习技术真是好难熬呀!但是看到效果的时候又很有成就感。

    有14位网友表示赞同!

。婞褔vīp

这种系统性的教程真好,一步步讲解,让人容易理解。

    有14位网友表示赞同!

風景綫つ

希望以后还有更多关于VB/VBA的课程分享,我会一直跟着学的!

    有7位网友表示赞同!

▼遗忘那段似水年华

这些函数听起来都挺复杂的,但只要学明白用法就很有用的样子。

    有7位网友表示赞同!

绳情

编程技术真是越来越进步了!未来还有更多让人惊叹的功能吧!

    有20位网友表示赞同!

醉红颜

学习VB/VBA 真是个很好的选择,能让我在未来的职业道路上更有竞争力。

    有8位网友表示赞同!

ˉ夨落旳尐孩。

我一直在寻找学习 VB/VBA 的资源,这个系列课看来很棒!

    有7位网友表示赞同!

用户评论

々爱被冰凝固ゝ

终于有人好好讲解了 VB 的日期函数!一直想用 DateAdd 来操作时间点,结果官方文档看得云里雾里。这篇文章清晰易懂,重点强调了每个函数的作用,受益匪浅!

    有15位网友表示赞同!

等量代换

对新手 Friendly 来说确实不错,但对于资深程序员来说就显得浅显了一些。日期处理的技巧很多种,这篇博客或许只是触碰到了其中的一部分。

    有19位网友表示赞同!

纯真ブ已不复存在

学习编程以来第一次真正理解了 DateAdd 的用法!以前总是用笨手 clumsy 的方法来处理时间,浪费了那么多精力。作者解释真的很细致,感谢分享!

    有8位网友表示赞同!

灼痛

这个 "核心函数" 听起来太夸张了吧?我觉得 VB/VBA/VBS 中还有很多更重要的函数和技巧没被提出来,这篇文章只是沧海一粟。

    有14位网友表示赞同!

迷路的男人

我一直在寻找一些快速处理日期的 VBA 技巧,这篇博客给我带来了启发。比如 DateDiff 函数的使用场景和技巧,真是太实用了!

    有20位网友表示赞同!

落花忆梦

文章虽然讲了 Date系列函数的应用,但我感觉缺乏实际案例的演示性更强的讲解方式,学习效果比直接看文档略差。

    有11位网友表示赞同!

无寒

我以前就是一直用粗浅的方法来处理日期问题,导致很多麻烦。这次感谢作者把这种核心函数彻底解释清晰了,以后可以告别使用笨拙的方式!

    有8位网友表示赞同!

迁心

这篇文章让我明白,日期处理的功能其实很简单,关键在于掌握合适的函数和技巧就能轻松解决复杂的需求。

    有10位网友表示赞同!

米兰

日期函数的学习难度不大,文章也讲得比较好,但我觉得对初学者来说,再多一些针对不同情况的使用示例会更好理解一些。

    有15位网友表示赞同!

余温散尽ぺ

终于明白 DateAdd 不是简单的加法操作!原来还有这么多细节需要注意,感谢作者耐心解释。这个博客很有启发性,我会继续学习其他的日期处理技巧!

    有19位网友表示赞同!

念初

这篇文章让我明白,高效的VB/VBA编写需要关注细节,掌握一些核心函数和技巧,才能够真正提升编程效率。

    有8位网友表示赞同!

小清晰的声音

虽然文章阐述得很好,但个人觉得缺少实战案例的展示,对于想要快速应用日期处理技巧的人来说可能有点枯燥。

    有6位网友表示赞同!

隔壁阿不都

对于 VBA 的学习来说,深入理解日期处理的功能确实很重要,这篇文章帮助我更清楚地认识到这一点。

    有15位网友表示赞同!

﹏櫻之舞﹏

我觉得这篇文章很适合作为入门资料阅读,可以帮助初学者快速了解 VB/VBA/VBS 中的一些基础日期处理函数,但如果想要更深层次的学习,还需要继续探索其他资源。

    有14位网友表示赞同!

孤城暮雨

对于我这种经常使用 VBA 进行自动化任务的人来说,掌握一些高效的日期处理技巧非常重要。这篇文章虽然看似简单,但却涵盖了很多实用性的知识点,值得细读研究!

    有10位网友表示赞同!

浅笑√倾城

DateAdd 的用法终于理解了!以前总是搞混了它和其他类似函数的用法,导致很多错误。文章讲解清楚,受益匪浅!

    有17位网友表示赞同!

千城暮雪

对 VB/VBA 编程感兴趣的朋友们,强烈推荐这篇文章!深入浅出的解析了日期处理的核心函数,为你的开发提供强大支持。

    有18位网友表示赞同!

残留の笑颜

我感觉对于初学者来说,这篇文章的语言可能太晦涩了一些。能否添加一些更加通俗易懂的解释和例子呢?

    有10位网友表示赞同!

本文由发布,不代表千千择校网立场,转载联系作者并注明出处:https://www.qqzexiao.com/gjjy/6721.html

联系我们

在线咨询:点击这里给我发消息

微信号:weixin888

工作日:9:30-18:30,节假日休息