将日期转换为字符串以进行自动目录搜索

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 转换为日期时间以进行比较 [重复]

在 oracle 中从日期格式转换为日期格式

java 转换字符串日期java以分钟为单位的日期长差异将长转换为int

json中的String类型的日期为啥自动转换成date类型

Javascript将日期时间字符串转换为纪元