2018年3月26日,为何Str(CDbl(Now()))返回43185.44166666667、Str(CLng(Now()))返回43185?
为什么
Str(CDbl(Now()))/Str(CLng(Now()))返回数字而非你要的日期格式字符串? 首先得搞清楚VBA里日期值的本质:VBA的日期/时间类型本质上是浮点数,这个设计和很多编程语言一致:
- 整数部分:代表从1900年1月1日到目标日期的总天数(1900-01-01对应数值1)
- 小数部分:代表当天的时间占比(比如0.5就是中午12点,0.441666...大概是上午10点35分左右)
所以你看到的43185就是2018年3月26日距离1900年1月1日的总天数,43185.44166666667则是加上了当天的时间比例。CDbl(Now())是把日期转成完整的浮点数值,CLng(Now())是取整数部分(只保留天数),再用Str()转成字符串,自然就是数字形式了。
怎么得到以26032018开头的字符串?
你需要的是格式化日期为指定字符串格式,这时候应该用VBA的Format函数,而不是转成数值再转字符串。举几个实用例子:
- 只取日期部分:
Format(Now(), "ddmmyyyy")→ 返回26032018 - 加上时分秒:
Format(Now(), "ddmmyyyyhhmmss")→ 返回类似26032018103500的字符串 - 带分隔符的格式:
Format(Now(), "dd/mm/yyyy hh:mm:ss")→26/03/2018 10:35:00
简单说,Str(CDbl(Now()))是在获取日期的底层数值表示,而Format(Now(), "你的格式")才是把日期转成你想要的可读字符串格式。
内容的提问来源于stack exchange,提问作者enny
相关产品推荐
相关产品推荐

