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

如何在PowerShell中将ISO时间字符串转换为datetime2(7)格式?

解决PowerShell中ISO时间转datetime2(7)格式的问题

首先,你的方向是对的,datetime2(7)要求的格式确实是yyyy-MM-dd HH:mm:ss.fffffff(精确到7位小数的秒),但需要注意输入的UTC时间字符串(带Z后缀)的解析和时区处理,这是容易踩坑的点。

分两种场景处理:


1. 需要保留UTC时间(和输入的Z时间一致)

输入的2020-08-19T08:00:53.643Z是UTC时间,默认情况下Get-Date会将其转换为你的本地时区时间。如果要保持UTC的时间值,需要显式转为UTC后再格式化:

$temp = "2020-08-19T08:00:53.643Z"
# 解析为DateTime对象后转UTC,再按指定格式输出
$lastExecutedTime = (Get-Date $temp).ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss.fffffff")

或者更简洁的PowerShell写法:

$lastExecutedTime = Get-Date $temp -Utc | Get-Date -Format "yyyy-MM-dd HH:mm:ss.fffffff"

输出结果会是:2020-08-19 08:00:53.6430000(自动补全7位小数,符合datetime2(7)要求)。

2. 需要转换为本地时区时间

如果你的业务需要将UTC时间转成本地时间,那你原来的代码基本可以用,但建议先确认解析是否正确(PowerShell对ISO 8601格式的支持很友好):

$temp = "2020-08-19T08:00:53.643Z"
$lastExecutedTime = Get-Date $temp -Format "yyyy-MM-dd HH:mm:ss.fffffff"

比如你的本地时区是东八区(北京时间),输出会是2020-08-19 16:00:53.6430000,这也是符合datetime2(7)格式的。

关键注意点:

  • 输入的Z后缀代表UTC时间,Get-Date默认会做时区转换,所以一定要根据业务需求选择是否保留UTC。
  • 格式字符串中的fffffff对应7位小数,即使输入只有3位毫秒(比如.643),PowerShell会自动补零到7位,完全满足datetime2(7)的精度要求。

内容的提问来源于stack exchange,提问作者Rajendar Talatam US - IFS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:22:33