string - 将日期格式从 DD.MM.YYYY 转换为 YYYY-MM-DD

标签 string powershell date

我在磁盘上有德语格式的文件夹:“01.05.2019”,我想将其转换为英语格式:“2019-05-01”。

我正在使用 PowerShell。这样做有什么花哨的功能吗?或者我应该获取所有子字符串并重新排序吗?

目前我只收集字符串:

$OrgDir = "P:\Fotos\Import"
$folders = Get-ChildItem $($OrgDir) -Directory 
foreach ($dir in $folders) {
    Write-Host "folder: " $dir
}

最佳答案

使用 [DateTime]::ParseExact() 避免日期解析器混淆月份和日期:

$OrgDir = "P:\Fotos\Import"
$folders = Get-ChildItem $OrgDir -Directory
foreach ($dir in $folders) {
    Write-Host "folder: $([DateTime]::ParseExact($dir.Name, "dd.MM.yyyy", $null).ToString("yyyy-MM-dd"))"
}

上面打印出转换后的名称。但是,为了有效地重命名文件,我建议这样做:

Get-ChildItem $OrgDir -Directory | 
    ForEach-Object {
        $_ | Rename-Item -NewName (
            [DateTime]::ParseExact($_.Name, "dd.MM.yyyy", $null).ToString("yyyy-MM-dd")
        )
    }

这行 PowerShell 将 $OrgDir 中的所有目录重命名为新的日期格式,假设文件夹中的所有目录都以此方式命名。

Reference


更新:

正如@Matt Johnson 指出的那样,$null 使用您的系统默认文化 ParseExact(string, format, culture)(以及 ToString(format , 文化)).这可能会也可能不会导致问题,具体取决于您的系统当前的文化设置。

为确保这些设置不会干扰此功能,请使用 [System.Globalization.CultureInfo]::InvariantCulture 作为 ParseExact()ToString().

关于string - 将日期格式从 DD.MM.YYYY 转换为 YYYY-MM-DD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56842327/

相关文章:

c - 我无法输入带空格的字符串

c++ - 递归函数生成不包含两个相邻相同子串的字符串c++

java - Android 保存字符串

java - 错误 : Calendar cannot be resolved in JSP

string - 使用 PowerShell 提取子字符串

powershell - 列出域内远程计算机的硬盘信息

Powershell如何使用仅知道文件名一部分的测试路径

tsql - Invoke-Sqlcmd有时会报告TSQL错误,有时却不会。

Javascript 方法 Date() 在我的系统上返回错误的日期(2 月 9 日而不是 9 月 2 日),

java - 如何在 Java 中创建一个没有年份参数的新 Date 对象?