PowerShell中对字符串日期键哈希表按实际日期排序的方法
解决PowerShell哈希表多格式日期键的正确排序方法
核心思路是为每个日期键生成标准化的DateTime对象用于排序,但保留原始字符串键。针对dd/MM/yyyy和MM/yyyy两种格式,处理逻辑如下:
- 对
MM/yyyy格式的键,自动补充当月第一天(01),转换为完整日期后生成DateTime对象; - 对
dd/MM/yyyy格式的键,直接转换为DateTime对象; - 基于转换后的DateTime排序,最终输出仍保留原始字符串键。
实现代码示例
# 示例哈希表 $userCountByDate = @{ "15/03/2023" = 5 "02/2023" = 12 "01/01/2024" = 8 "12/2022" = 3 "20/05/2023" = 7 } # 按实际日期顺序排序,保留原字符串键 $userCountByDate.GetEnumerator() | Sort-Object { if ($_.Key -match "^(\d{2})/(\d{4})$") { # MM/yyyy格式,补01转为完整日期 [DateTime]::ParseExact($_.Key + "/01", "MM/yyyy/dd", $null) } else { # dd/MM/yyyy格式直接转换 [DateTime]::ParseExact($_.Key, "dd/MM/yyyy", $null) } }
关键说明
- 使用
ParseExact确保日期转换不受系统区域设置干扰,保证准确性; - 正则表达式
^(\d{2})/(\d{4})$精准匹配MM/yyyy格式的键; - 排序结果会严格遵循时间顺序,比如
12/2022→02/2023→15/03/2023→20/05/2023→01/01/2024,同时保留原始字符串键。
内容的提问来源于stack exchange,提问作者Di N
相关产品推荐
相关产品推荐

