2017-06-20 52 views
2

如何指定我的输入字符串的哪一部分是日期和月份?获取日期格式/文化

如果输入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

+0

这真的只与[tag:PowerShell-v2.0]有关吗? – bahrep

+1

尽管问题可能适用于所有版本的PowerShell,但具体解决方案可能不适用,因此指定v2.0标记表示用户对可用于该版本PowerShell的解决方案感兴趣。 –

回答

1

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

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

编辑 - 扩展的解决方案感谢叶普的评论

的培养没有指定。然而,它的论点,否则你会得到一个错误Cannot find an overload for "ParseExact" and the argument count: "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 
+0

工程..!谢谢。 – Bittu

+2

好的。更好的是'[datetime] :: ParseExact(“01/10/2017”,“dd/MM/yyyy”,[cultureinfo] :: InvariantCulture)'(无需每次创建新的特定文化)或'[datetime ] :: ParseExact(“01/10/2017”,“dd'/'MM'/'yyyy”,$ null)'(一旦你用单引号转义斜杠字符,你并不关心解析过程中使用的文化)。 –

+0

@杰普斯蒂格尼尔森 - 谢谢,不知道那些是选项。理想情况下,我想调用ParseExact而不指定第三个参数。现在AFC将在我可以确认并更新答案时 – gms0ulman

1

阅读文档或PowerShell控制台运行Get-Help Get-Date

您应该阅读MSDN上涵盖Get-Date PowerShell cmdlet的文档并提供所有必要示例。仔细看看Parameters部分。

+0

你能更具体吗?无论当前的文化是什么,具有智能参数的Get-Date(来自文档)如何帮助将字符串“01/10/04”转换为代表2017年10月1日的DateTime值? –

3

请尝试这个

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

工程..!谢谢。你能简单介绍一下它的工作原理 – Bittu

+1

Yes Sure @ Bittu,基本上你会强制日期到它需要的格式,然后再次将它提供给“Get-date -Date”,所以它将它转换为它想要的。要将日期转换为指定日期,我们在(01/10/2017)上提供格式(dd-date,MM-months,Years),因此在此之后您的变量将自动转换为(10/01/2017),并且默认情况下,您的工作将由Get-日期本身 –

+1

这种解决方案是错误的。当'$ date'是''20/10/2017''时会发生什么?它会失败(假设当前的文化偏好“MM/dd/yyyy”,例如英语(美国)文化)。 –