【问题标题】:Convert datetime string to a different datetime string in PowerShell v2在 PowerShell v2 中将日期时间字符串转换为不同的日期时间字符串
【发布时间】:2017-03-09 13:12:05
【问题描述】:

我有以下字符串,它是从日志文件中的条目中提取的。

$d = "19/09/2014 22:41:27"

但是,我需要将其转换为

2014-09-19 22:41:27

这样我就可以将它与日志文件的其他部分一起导出到 MySQL 数据库中。

但我这辈子都找不到办法做到这一点。我期待找到类似 set-dateFormat 的东西,它会简单地重新映射字符串的组件,但它似乎不存在。

我尝试了以下各种变体:

$a = "19/09/2014 22:41:27"
$d = [datetime]::ParseExact($a, "dd/MM/yyyy hh:mm:ss", $null)
$e = "{0:yyyymmddhhmmss}" -f [datetime]$d

但是一切都返回错误:

字符串未被识别为有效的日期时间。

请问获得我需要的格式的最佳方法是什么?

【问题讨论】:

  • 关于“字符串未被识别为有效日期时间”的错误是由于您的 ParseExact 日期格式。您在字符串 $a 中列出了 24 小时时间,但您尝试使用小写“hh:”将其读取为 12 小时时间。如果您使用“HH:”,它会转换得很好。

标签: datetime powershell-2.0


【解决方案1】:

在其他一些博客的帮助下,快速玩了一下,提供了以下内容,与您自己的非常相似。可能有一种方法可以使它更加精简,但它会创建您需要的日期时间对象。之后操作输出应该很简单。

$theDTString = "19/09/2014 22:41:27".toString()
$theDateTimeObject = ([datetime]::ParseExact($theDTString,"dd/MM/yyyy HH:mm:ss",$null))

$theDateTimeObject.year.toString() + "-" + $theDateTimeObject.month.toString() +"-"+ 
$theDateTimeObject.day.toString() + " " + $theDateTimeObject.Hour.toString() + ":" +$theDateTimeObject.Minute.toString() + ":" + $theDateTimeObject.Second.toString()

【讨论】:

  • 干杯,这(几乎)完美。唯一的问题是它错过了当月的前导 0,所以它有 9 而不是 09。我通过首先创建每个部分(日、月等),然后检查长度(-lt 2)来解决这个问题,然后在构造最终日期之前添加 0。
【解决方案2】:

与您的原始输入相同的答案是:

$a = "19/09/2014 22:41:27"
$d = [datetime]::ParseExact($a, "dd/MM/yyyy HH:mm:ss", $null)
$e = "{0:yyyymmddhhmmss}" -f [datetime]$d

尝试将 22 小时转换为 12 小时格式时出错。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 2016-10-27
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多