Power Query自定义格式文本转DateTime的实现方法咨询
解决方案
针对你的日期时间格式2023-05-26-11.04.58.019027,可以通过两种方式实现转换,以下是具体操作:
方法一:字符串预处理后转换
先将非标准格式字符串调整为Power Query可识别的格式,再转换为DateTime类型:
修改后的完整Power Query代码:
let Quelle = Excel.Workbook(File.Contents("\\...\Desktop\Juni.xlsx"), null, true), #"Zeiten 1Task Juni 2023_Sheet" = Quelle{[Item="Zeiten 1Task Juni 2023",Kind="Sheet"]}[Data], #"Höher gestufte Header" = Table.PromoteHeaders(#"Zeiten 1Task Juni 2023_Sheet", [PromoteAllScalars=true]), // 调整字符串格式并转换为DateTime #"转换日期时间列" = Table.TransformColumns(#"Höher gestufte Header", { {"你的日期时间列名", (text) => DateTime.FromText( Text.Replace(Text.Replace(text, "-", "T", 3), ".", ":", 2) ), type datetime} }) in #"转换日期时间列"
代码说明:
Text.Replace(text, "-", "T", 3):仅替换日期与时间之间的第3个-为T,将2023-05-26-11.04.58.019027转为2023-05-26T11.04.58.019027Text.Replace(..., ".", ":", 2):替换时间部分前2个.为:,得到2023-05-26T11:04:58.019027DateTime.FromText(...):自动忽略毫秒部分,转换为标准DateTime类型
方法二:直接指定输入格式字符串
利用DateTime.FromText的格式参数,直接匹配输入格式,无需额外字符串处理:
修改后的代码:
let Quelle = Excel.Workbook(File.Contents("\\...\Desktop\Juni.xlsx"), null, true), #"Zeiten 1Task Juni 2023_Sheet" = Quelle{[Item="Zeiten 1Task Juni 2023",Kind="Sheet"]}[Data], #"Höher gestufte Header" = Table.PromoteHeaders(#"Zeiten 1Task Juni 2023_Sheet", [PromoteAllScalars=true]), // 直接通过格式字符串匹配转换 #"转换日期时间列" = Table.TransformColumns(#"Höher gestufte Header", { {"你的日期时间列名", (text) => DateTime.FromText( text, [Format="yyyy-MM-dd-HH.mm.ss.ffffff"] ), type datetime} }) in #"转换日期时间列"
代码说明:
Format="yyyy-MM-dd-HH.mm.ss.ffffff":完全匹配你的输入格式,ffffff对应毫秒部分,DateTime.FromText会自动将其转换为DateTime类型并忽略多余精度(datetime类型默认不保留毫秒)
注意事项
- 请将代码中的
你的日期时间列名替换为实际列名称(可在#Höher gestufte Header步骤的预览中查看) - 处理大型文件时,方法二性能更优,减少了字符串替换操作
内容的提问来源于stack exchange,提问作者aw23edfr4
相关产品推荐
相关产品推荐

