powershell - 如何使用 powershell 将文件名上的时间戳转换为 UTC 格式?
问题描述
我有一堆包含数千个文件的文件夹,我从中生成一个仅包含文件名的 .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."
我很确定这是单元格格式的问题,但我还不能解决它。
解决方案
首先使用ParseExact()方法解析时间戳以获取 DateTime 对象。由于格式似乎是自定义格式,因此您需要告诉解析方法哪些部分是哪些部分。为此使用了格式字符串。要解决时区问题,请使用 InvariantCulture。像这样,
$dt = [datetime]::parseExact('20180523040545689', 'yyyyMMddHHmmssfff', [cultureinfo]::invariantCulture)
现在有了 DateTime 对象,调用 ToString()。内置o
格式很接近,但不完全是。像这样,
$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
推荐阅读
- php - 在目录中创建新文件时在 Linux 中运行 Crontab
- r - 如何在R中融化数据框
- javascript - 是什么阻止我的 jquery 函数执行 ajax 脚本
- angular - 默认图像未显示,而 Angular 4 中的配置文件图像为空
- php - elseif 不能按预期在 php 中工作
- javascript - 在可拖动的div下获取文本(jquery)
- javascript - 做什么和意思是?
- tensorflow - 冻结 mobilenet_v2 (freeze_graph.py)
- javascript - 如何在 JS 中使用三元运算符进行返回?
- apache - 关闭centos 6时重新启动Apache