首页 > 解决方案 > 将日期格式从 DD.MM.YYYY 转换为 YYYY-MM-DD

问题描述

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

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

目前我只收集字符串:

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

标签: stringpowershelldate

解决方案


用于[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")
        )
    }

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

参考


更新:

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

为确保这些设置不会干扰此功能,请使用和[System.Globalization.CultureInfo]::InvariantCulture中的区域性参数。ParseExact()ToString()


推荐阅读