You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何在计算属性里转换日期字符串为[datetime]并正确排序

解决JSON属性重命名与日期排序问题

问题描述

给定JSON数据如下:

[
    {
    "Title":"stackoverflow",
    "URL":"https://stackoverflow.com",
    "Modified Time":""
    },
    {
    "Title":"example",
    "URL":"https://example.com",
    "Modified Time": "11/01/2022 14:38:48"
    },
    {
    "Title":"reddit",
    "URL":"https://reddit.com",
    "Modified Time": "11/01/2023 14:38:48"
    },
    {
    "Title":"bbc",
    "URL":"https://bbc.com",
    "Modified Time": "01/11/2024 09:00:00"
    }
]

需完成两项操作:

  1. 将属性Modified Time重命名为CreationTime
  2. 按CreationTime实现正确的时间顺序排序(直接按字符串排序不符合预期,空日期字符串转换datetime类型会报错,需将空值转为默认日期01/01/2000后再转换类型,同时保留原有其他属性、移除原Modified Time属性)

当前困惑:不知道如何在计算属性块中引用当前对象及其属性。

解决方案

使用PowerShell的Select-Object结合计算属性处理转换逻辑,基于转换后的日期类型排序,具体代码如下:

# 读取JSON文件(替换为你的文件路径)
$jsonData = Get-Content -Path "your-file-path.json" | ConvertFrom-Json

# 处理属性重命名、空日期转换并排序
$processedData = $jsonData | Select-Object `
    Title,
    URL,
    @{
        Name = 'CreationTime'
        Expression = {
            # 引用当前对象的Modified Time属性
            $dateStr = $_.['Modified Time']
            # 空值替换为默认日期后转换为datetime类型
            if ([string]::IsNullOrEmpty($dateStr)) {
                [datetime]"01/01/2000"
            } else {
                [datetime]$dateStr
            }
        }
    } | Sort-Object -Property CreationTime # 升序排序,添加-Descending参数可改为降序

# 可选:将处理后的数据转换回JSON输出
$processedData | ConvertTo-Json -Depth 10

代码说明

  • $_.['Modified Time']:在计算属性的Expression块中,$_代表当前管道对象,通过索引器可直接引用带空格的属性名Modified Time
  • 空日期处理:用[string]::IsNullOrEmpty判断日期字符串是否为空,为空则返回默认的datetime对象01/01/2000,否则直接转换为datetime类型
  • 排序逻辑:基于转换后的datetime类型CreationTime排序,确保时间顺序符合预期
  • 属性保留:Select-Object中显式指定Title、URL和计算生成的CreationTime,自动排除原Modified Time属性

内容的提问来源于stack exchange,提问作者Ralf_Reddings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:25:17