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

PowerShell将PostgreSQL日期转换为MS Graph兼容格式报错求助

问题

需要将PostgreSQL中的日期转换为MS Graph兼容格式,用于在M365中创建预约。通过ODBC连接PostgreSQL数据库,将业务应用的客户预约数据存入System.Data.DataTable对象。PostgreSQL中该日期字段类型为timestamp without time zone且无法修改,存储的字符串格式如下:

Friday, 21. March 2025 08:00:00.

MS Graph创建预约所需的日期格式为:

2017-04-15T14:00:00

使用PowerShell尝试转换时,执行代码报错:

调用“ParseExact”时发生异常,传入3个参数:“该字符串未被识别为有效的DateTime。”

原PowerShell转换部分代码:

foreach ($row in $ds) {

    $shpdate = $row.termin
    $provider = [CultureInfo]::InvariantCulture
    $shpdateformat = 'dddd dd,mmmm,yyyy HH:mm:ss'
    $graphdateformat = 'yyyy-m-ddTHH:mm:ss'

    $GraphDate = [DateTime]::ParseExact($shpdate, $shpdateformat, $provider)
    $GraphDate.ToString($graphdateformat)
}
解决方案

报错核心原因是ParseExact使用的格式字符串与PostgreSQL返回的日期字符串格式完全不匹配,具体修正点及代码如下:

  1. 匹配PostgreSQL日期的格式细节:
    • 日的后缀有英文句号(如21.)
    • 星期与日之间是逗号加空格(Friday, 21.)
    • 月份与年份之间是空格而非逗号
    • 时间末尾有英文句号(00:00.)
  2. 修正MS Graph的日期格式:将单数字月份改为两位(如1→01),符合标准格式要求

修正后的转换代码:

foreach ($row in $ds) {

    $shpdate = $row.termin
    $provider = [CultureInfo]::InvariantCulture
    # 完全匹配PostgreSQL返回的日期字符串格式
    $shpdateformat = 'dddd, dd. MMMM yyyy HH:mm:ss.'
    # 符合MS Graph标准的日期格式
    $graphdateformat = 'yyyy-MM-ddTHH:mm:ss'

    $GraphDate = [DateTime]::ParseExact($shpdate, $shpdateformat, $provider)
    $GraphDate.ToString($graphdateformat)
}

额外优化提示:
如果ODBC驱动返回的$row.termin本身是DateTime类型而非字符串,可以直接跳过解析步骤,直接格式化输出:

$row.termin.ToString('yyyy-MM-ddTHH:mm:ss')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:17:03