【问题标题】:Get-Date formatting/culture获取日期格式/文化
【发布时间】:2020-08-27 06:21:27
【问题描述】:

如何指定输入字符串的哪一部分是日期和月份?

如果输入是01/10/2017,则可以读作2017 年10 月1 日2017 年1 月10 日。两者都是正确的。

我想明确指出,01 是日期,10 是月份,这样无论语言环境和时间格式如何,我都可以获得一致的结果。

示例代码:

get-date  -Date '01/10/2017'

输出是:

Tuesday, January 10, 2017 12:00:00 AM

想要的输出是:

Sunday, October 01, 2017 12:00:00 AM

【问题讨论】:

  • 这真的只与powershell-v2.0有关吗?
  • 阅读文档或在 PowerShell 控制台中运行 Get-Help Get-Date。您应该阅读 MSDN 上涵盖 Get-Date PowerShell cmdlet 并提供所有必要示例的文档。仔细查看Parameters 部分。
  • 虽然该问题可能适用于所有版本的 PowerShell,但特定的解决方案可能并不适用,因此指定 v2.0 标签表示用户对适用于该版本 PowerShell 的解决方案感兴趣。跨度>

标签: powershell datetime powershell-2.0


【解决方案1】:

我有一个解决方案。它要求将文化作为论据之一。

([datetime]::ParseExact($date,"dd/MM/yyyy",[Globalization.CultureInfo]::CreateSpecificCulture('en-GB')))

不必指定文化。但是,它的参数确实如此,否则你会得到一个错误:

找不到“ParseExact”的重载和参数计数:“2”。

[cultureinfo]::InvariantCulture$null 可以用作第三个参数:

$date = "01/10/2017"
[datetime]::ParseExact($date, "dd/MM/yyyy", [cultureinfo]::InvariantCulture)
[datetime]::ParseExact($date, "dd/MM/yyyy", $null)

三种情况下的输出

01 October 2017 00:00:00

【讨论】:

  • 工作..!!谢谢。
  • 好一个。更好的是[datetime]::ParseExact("01/10/2017", "dd/MM/yyyy", [cultureinfo]::InvariantCulture)(无需每次都创建新的特定文化)或[datetime]::ParseExact("01/10/2017", "dd'/'MM'/'yyyy", $null)(一旦你用单引号转义斜线字符,你就不会真正关心在解析过程中使用什么文化)。
  • @Jeppe Stig Nielsen - 谢谢,不知道这些是选项。理想情况下,我想在不指定第三个参数的情况下调用 ParseExact。 AFC 现在,我会确认并更新答案
  • 请注意以下几点: (A) documentation for ParseExact says:“如果 providernull,则使用与当前区域性相对应的 CultureInfo 对象。” (B) 如果我们在 PowerShell 2.0(旧!)上,我在第一个评论中使用的 类型加速器 [cultureinfo] 不存在,所以在这种情况下我们必须说 [Globalization.CultureInfo],如果我们决定明确给出一种文化。
【解决方案2】:

试试这个:

Get-Date(Get-Date -Date $date -Format 'dd/MM/yyyy')

【讨论】:

  • 是的,当然@Bittu,基本上你将日期强制为它需要的格式,然后再次将其提供给“Get-date -Date”,所以它会按预期转换它。到将日期转换为指定日期,我们在 (01/10/2017) 上提供格式 (dd-date,MM-months,Years),因此在此之后您的变量会自动转换为 (10/01/2017),默认情况下您的工作将由 Get-Date 自己完成
  • 这个解决方案是错误的。当$date'20/10/2017' 时会发生什么?它会失败(假设当前文化更喜欢MM/dd/yyyy,例如英语(美国)文化)。
  • @ChetanKulkarni 感谢您的解释,但它不适用于不同文化中的所有日期。试过en-inen-us
  • 此解决方案正在考虑您明确希望将日期定义为 dd/MM/YY 的日期格式。
【解决方案3】:

您可以对单个命令(或命令块)强制执行文化。这应该有助于避免日期混乱。

PS C:\> [System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-US" ; [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"; get-date -Date '01/10/2017'
Tuesday, January 10, 2017 12:00:00 AM

PS C:\> [System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-GB" ; [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-GB"; get-date -Date '01/10/2017'
01 October 2017 00:00:00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2014-04-24
    • 2016-05-25
    • 1970-01-01
    • 2014-12-16
    相关资源
    最近更新 更多