Excel VBA 编程基础 -- 日期与时间(六)- 信息格式化
FormatDateTime(dateExpr[, NamedFormat])其中,dateExpr 是一个日期时间表达式,NamedFormat 取值如下图所示:NamedFormat 是一个可选参数,如果不指定,则默认取值 0,即 vbGeneralDate。由图可见,不指定 NamedFormat 参数时,FormatDateTime 默认取 0 值,也就是 vbGeneralDate,这个参数在日期和时间都存在时,相当于 vbShortDate + vbLongTime,但如果只有日期而没有时间,则相当于 vbShortDate。FormatDateTime 用于格式化日期时间,而且因为参数的意义比较直观,因此用起来也很简单直接。但也正因为如此,其功能也比较有限。下面介绍一个功能更加强大的格式化函数。Format 是一个转换函数,将一个表达式转换为指定的格式。其一般格式如下:Format(expr, [ format ], [ firstdayofweek ], [ firstweekofyear ])Format 是一个通用的转换函数,不限于格式化日期时间,所以 expr 可以是任何合法的表达式(我们这里只限于日期时间的格式化,其他的格式化留待以后再讨论)。firstdayofweek 和 firstweekofyear 我们在讨论 DateDiff 函数时已经见识过,此处不赘。例1. Format 与 FormatDateTime图3 Format 与 FormatDateTime由图可见,不指定 format 参数的 Format 函数,在格式化日期时间时,与不指定 NamedFormat 参数(或指定 NamedFormat 参数为 vbGeneralDate)的 FormatDateTime 函数相同。另外,FormatDateTime 的 NamedFormat 参数和 Format 函数的 format 有如下的对应关系:图4 NamedFormat 和 format 的对应关系其中,NamedFormat 的值是符号常量,而 format 的值是字符串。由此可以认为,FormatDateTime 是 Format 函数的特定版本,而 Format 则是 FormatDateTime 的一般化版本。Format 函数中的格式化字符串除了与 FormatDateTime 函数中的 NamedFormat 对应的之外,还有更加灵活的表示,其中用来格式化日期的符号如下表所示:- Sunday = 1 表示 firstdayofweek = vbSunday
- 第一周从元月1日算起 表示 firstweekofyear = vbFirstJan1
对照图5 的格式化符号,本例中的代码及其输出结果不难理解。只说明两点:- Format(t, "w") 的输出结果 4 表示 2026-04-22 这一天是周三(因为周日是 1)。
- Format(t, "y") 的输出结果 112 表示 2026-04-22 这一天是 2026 年的第 112 天,这就是“年中的天”的意义。Format(t, "d") 的 22 表示这一天是 4 月的第 22 天,这就是“月中的天”的意义。
其中,n/nn 只能单独使用,如果和 h/hh 一起使用,必须用 m/mm。和图7 的格式化符号对照阅读,本例的时间格式化代码和结果不难理解。- Format(t)、Format(t, "ttttt")、Format(t, "h:mm:ss") 三种格式化的效果是相同的。
- h/m/s、hh/mm/ss、n/nn:单字母表示无前置零,双字母表示有前置零。
- Format(t, "AMPM") 显示的是在 Windows 中设定的上、下午符号:
- 当然,这些符号都是可以修改的。虽然如此,但一般还是不要修改 Windows 的默认设定。