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返回的日期字符串格式完全不匹配,具体修正点及代码如下:
- 匹配PostgreSQL日期的格式细节:
- 日的后缀有英文句号(如
21.) - 星期与日之间是逗号加空格(
Friday, 21.) - 月份与年份之间是空格而非逗号
- 时间末尾有英文句号(
00:00.)
- 日的后缀有英文句号(如
- 修正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
相关产品推荐
相关产品推荐

