如何使用powershell将文件名上的时间戳转换为UTC格式?

如何使用powershell将文件名上的时间戳转换为UTC格式?,powershell,time,Powershell,Time,我有一堆包含数千个文件的文件夹,从中生成一个仅包含文件名的.csv文件。这些文件名包含以下格式的时间戳:20180523040545689 我想将.csv文件上的这些时间戳转换为UTC格式,如下所示:2018-05-23 T 04:05:45.689 TZ+01:00 以下是我目前使用的.csv格式: 20180523040545689, 458796ZUx, WE25, 79peo 以下是我想要获得的输出: 2018-05-23 T 04:05:45.689 TZ +01:00, 45879

我有一堆包含数千个文件的文件夹,从中生成一个仅包含文件名的.csv文件。这些文件名包含以下格式的时间戳:
20180523040545689

我想将.csv文件上的这些时间戳转换为UTC格式,如下所示:
2018-05-23 T 04:05:45.689 TZ+01:00

以下是我目前使用的.csv格式:

20180523040545689, 458796ZUx, WE25, 79peo
以下是我想要获得的输出:

2018-05-23 T 04:05:45.689 TZ +01:00, 458796ZUx, WE25, 79peo
有没有一种方法可以使用Powershell脚本快速而简单地实现这一点

更新:

我一直在测试@vonPryz提供的脚本,它给了我以下错误:

Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."

我很确定这是单元格格式的问题,但我还不能解决它。

首先用方法解析时间戳,以获得DateTime对象。由于格式似乎是自定义的,因此您可以使用解析方法确定哪些部分是哪个部分。一个格式字符串用于此。要避开时区问题,请使用不变量文化。这样,

$dt = [datetime]::parseExact('20180523040545689', 'yyyyMMddHHmmssfff', [cultureinfo]::invariantCulture)
现在有了DateTime对象,调用ToString()。内置的
o
格式很接近,但不完全相同。这样,

$dt = [datetime]::parseExact('20180523040545689', 'yyyyMMddHHmmssfff', [cultureinfo]::invariantCulture)
$dt.ToString('o')
2018-05-23T04:05:45.6890000
如果这还不够好,请查看更好的,或者使用解析部分中提到的自定义格式引用

编辑

根据评论线程,下面是一个示例解决方案

# Import the data
$data = Import-Csv C:\Temp\data.csv
# Peek the contents, for illustration purposes only
$data

col0              col1      col2 col3
----              ----      ---- ----
20180523040545689 458796ZUx WE25 76peo
20180524040545689 558796ZUx WE25 77peo
20180525040545689 658796ZUx WE25 78peo
20180526040545689 758796ZUx WE25 79peo

# Create a shorthand for invariant culture. Not strictly necessary, but makes things easier
$ci = [cultureinfo]::invariantCulture

# Loop through the data and change col0 contents.
# Tune the ToString() to provide suitable output
$data | % { $_.col0 = [datetime]::parseExact($_.col0, 'yyyyMMddHHmmssfff', $ci).ToString('o') }

# Show the modified content.
$data

col0                        col1      col2 col3
----                        ----      ---- ----
2018-05-23T04:05:45.6890000 458796ZUx WE25 76peo
2018-05-24T04:05:45.6890000 558796ZUx WE25 77peo
2018-05-25T04:05:45.6890000 658796ZUx WE25 78peo
2018-05-26T04:05:45.6890000 758796ZUx WE25 79peo

可能的重复我一直在看“可能的重复”,我发现它不是,它实际上没有线索,我的错。我粘贴了错误的链接。该错误意味着您的时间戳不是指定的格式。要调试它,需要查看数据。您能确定哪个时间戳是导致错误的时间戳吗?这是我仅有的时间戳20180523040545689,它与question@WadeBlackmore对不起,我不太明白你的意思。你能详细说明一下吗?对不起,我只是想问你是否尝试过这个脚本,它是否对你有效,因为它目前对我不起作用abd,因为我在powershell中是一个很好的noob,我仍然不知道如何使用它together@WadeBlackmore当然,我做过测试。当你尝试时会发生什么?您是否有一段您正在尝试运行的代码?如果是这种情况,请编辑问题并添加相关部分以及问题上的任何错误消息、不适当的结果等。请不要将这些作为评论发布,因为它们很难阅读。我不知道如何通过包含我的文件名的.csv文件运行脚本。我想知道我是必须调用.csv文件的完整路径,还是应该将脚本保存在与.csv文件相同的文件夹中?正如我之前提到的,我是一个真正的Powershell脚本编写高手。如果你能编辑你的答案,明确说明完整的脚本,那就太好了。我一直在尝试同样的方法,但它对我不起作用,我想我用错误的方式格式化了.csv单元格,我已经更新了问题