将日期转换为字符串以进行自动目录搜索
Posted
技术标签:
【中文标题】将日期转换为字符串以进行自动目录搜索【英文标题】:Convert date to string for automated directory searching 【发布时间】:2022-01-22 03:35:19 【问题描述】:我的最终目标是能够搜索文件路径,另一个用户将每月创建一个新文件夹(例如下个月用户将创建文件夹“2022 年 1 月”),我需要能够根据当前月份和年份自动搜索该文件夹。
我的计划是像这样创建一个字符串对象:
Dim strDirectory As String
strDirectory = "C:\foo\bar\baz\" & strCurrentMonthName & " " & strCurrentYear
但是,我无法将年份提取为文本。最初我试图这样做:
Dim TestMonth As String
Dim TestYear As String
TestYear = Year(Now)
TestMonth = GetMonthName(Format(Now, "mm"))
问题是testYear
被返回为 1905 年 7 月 13 日。 This webpage 展示了如何在电子表格中修复此错误,但这对我的情况没有帮助,因为日期永远不会从电子表格中提取(因为我觉得这是一种非常容易出错的做事方式)。 Year 函数据说只适用于 Variant、Numeric 或 String 表达式,我不知道如何从 Now
获取年份。
请记住,我访问标准库的能力非常有限,我使用的是旧版本的 Excel (2016),并且无法控制包或更新(如果没有这些,我必须使用某些功能以 MonthName() 为例,我必须创建自己的版本)
【问题讨论】:
【参考方案1】:Format 返回一个 Variant (String),其中包含根据格式表达式中包含的指令格式化的表达式。
所以你在Format
中表达的任何格式都将作为字符串返回。
Public Sub Test()
Dim CurrentDate As Date
CurrentDate = Date
Dim strDirectory As String
strDirectory = "C:\foo\bar\baz\" & Format(CurrentDate, "mmm yy") '"C:\foo\bar\baz\Dec 21"
strDirectory = "C:\foo\bar\baz\" & Format(CurrentDate, "mmmm yyyy") '"C:\foo\bar\baz\December 2021"
End Sub
不需要 GetMonthName
函数 - Format(Now(),"mmmm")
本月返回 12 月。
【讨论】:
这行得通,但我不明白为什么。当您声明CurrentDate = Date
时,不应该抛出错误吗?如果我输入 Dim myString As String myString = String
我也不希望它起作用
不,它不会抛出错误,因为我将CurrentDate
声明为Date data type 并使用Date function 返回当前系统日期。日期一词在两种不同的上下文中使用 - 作为一种数据类型和作为返回当前系统日期的一种方式。如果您使用 Dim MyString As String: MyString = "String"
,您的示例将起作用 - 我已将其声明为字符串并将单词字符串放入其中。
我想我是因为双重含义而感到困惑。当我应该使用Date
时,我试图使用Now
。谢谢!
我猜你可以使用Now()
- 它只是时间停留的日期(因为数字日期是整数,时间是数字的小数)。所以 12.5 是第 12 天的中午(第 12 天是 1900 年 1 月 12 日),12.25 是早上 6 点,12.75 是下午 6 点。【参考方案2】:
想通了:
Dim TestMonth As String
Dim TestYear As Date
testYear = Now
TestMonth = GetMonthName(Format(Now, "mm"))
Range("A1").Select
ActiveCell.FormulaR1C1 = "C:\foo\bar\baz\" & TestMonth & " " & Year(TestYear)
输出:
C:\foo\bar\baz\December 2021
【讨论】:
你应该选择@Darren 发布的直接方法。以上是关于将日期转换为字符串以进行自动目录搜索的主要内容,如果未能解决你的问题,请参考以下文章
如何将日期字符串转换为 mysql 日期格式以使用 mysql 查询计算日期差异
将 Y-m-dTH:M:Sz 转换为日期时间以进行比较 [重复]
java 转换字符串日期java以分钟为单位的日期长差异将长转换为int