【问题标题】:How to convert the timestamp on filenames to UTC format using powershell?如何使用 powershell 将文件名上的时间戳转换为 UTC 格式?
【发布时间】:2018-08-07 07:42:34
【问题描述】:

我有一堆文件夹,其中包含数千个文件,我从中生成一个仅包含文件名的 .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."

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

【问题讨论】:

  • 我一直在看“可能的重复”,我发现它不是,它实际上没有任何线索
  • 对不起,我的错。我粘贴了错误的链接。
  • 该错误意味着您的时间戳不是指定的格式。要调试它,需要查看数据。你能确定哪个时间戳是导致错误的时间戳吗?
  • 这是我唯一拥有的时间戳 20180523040545689,与问题中描述的完全相同

标签: powershell time


【解决方案1】:

首先使用ParseExact() 方法解析时间戳以获取DateTime 对象。由于格式似乎是自定义格式,您need to tell 解析方法是哪个部分。为此使用了格式字符串。要解决时区问题,请使用 InvariantCulture。像这样,

$dt = [datetime]::parseExact('20180523040545689', 'yyyyMMddHHmmssfff', [cultureinfo]::invariantCulture)

现在有一个 DateTime 对象,调用 ToString()。内置的o 格式很接近,但并不完全一致。像这样,

$dt.ToString('o')
2018-05-23T04:05:45.6890000

如果这还不够好,请查看standard formats 以获得更好的选择,或者使用解析部分中提到的自定义格式参考。

编辑

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

# 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

【讨论】:

  • @WadeBlackmore 对不起,我不太明白你的意思。你能详细说明一下吗?
  • 抱歉,我只是想问一下您是否尝试过该脚本以及它是否对您有用,因为目前它对我不起作用 abd,因为我是 powershell 中的一个漂亮菜鸟,我仍然不知道如何把它放在一起
  • @WadeBlackmore 当然,我确实测试过。当你尝试它时会发生什么?您是否有一段代码要尝试运行?如果是这种情况,请编辑问题并在问题上添加相关部分和任何错误消息、不适当的结果等。请不要将它们作为 cmets 发布,它们很难阅读。
  • 我不知道如何通过包含我拥有的文件名的 .csv 文件运行脚本。我想知道我是否必须调用 .csv 文件的完整路径,或者我是否应该将脚本保存在与 .csv 文件相同的文件夹中?正如我之前提到的,我是 Powershell 脚本的真正菜鸟。如果您可以编辑您的答案以明确完整的脚本,那就太好了
  • 我一直在尝试同样的事情,但它对我不起作用,我认为我以错误的方式格式化 .csv 单元格,我已经更新了问题
猜你喜欢
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多