深入解析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时间。比如磁盘里的文件时间,网站上的时间等。
用户评论
终于有人好好讲解了 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
用户评论
学习这些日期函数真的太有用啦!开发报表的时候经常用到。
有7位网友表示赞同!
感觉编程学起来越来越有意思了,能学会这么多实用的工具。
有5位网友表示赞同!
DateAdd这个函数真是太巧妙了,可以算出很多种日期变化呢。
有18位网友表示赞同!
以前总是手动计算日期差额,现在有了内置函数简直效率倍增!
有20位网友表示赞同!
不知道有没有讲DateDiff这类函数的教程?我也想试试这方面的用法。
有7位网友表示赞同!
学习VB/VBA 真是越来越懂了,这个系列课我一定学完!
有11位网友表示赞同!
这些日期函数用的到的场景很多,以后工作中肯定派上用场。
有17位网友表示赞同!
感觉现在编程比以前更便捷了,内置函数真的太方便了。
有6位网友表示赞同!
学习编程还是要坚持练习,才能熟能生巧。
有17位网友表示赞同!
希望还能学习到更多VB/VBA的实用的技巧和方法。
有7位网友表示赞同!
看完这个标题,感觉自己也要开始学一下 VB/VBA 啦!
有12位网友表示赞同!
日期处理是编程中常见的难题,了解这些函数能让我更快速完成任务。
有19位网友表示赞同!
学习技术真是好难熬呀!但是看到效果的时候又很有成就感。
有14位网友表示赞同!
这种系统性的教程真好,一步步讲解,让人容易理解。
有14位网友表示赞同!
希望以后还有更多关于VB/VBA的课程分享,我会一直跟着学的!
有7位网友表示赞同!
这些函数听起来都挺复杂的,但只要学明白用法就很有用的样子。
有7位网友表示赞同!
编程技术真是越来越进步了!未来还有更多让人惊叹的功能吧!
有20位网友表示赞同!
学习VB/VBA 真是个很好的选择,能让我在未来的职业道路上更有竞争力。
有8位网友表示赞同!
我一直在寻找学习 VB/VBA 的资源,这个系列课看来很棒!
有7位网友表示赞同!