Powershell获得第1,第2,第2,第4格式的日期

时间:2016-07-04 04:59:19

标签: powershell

我正在尝试将PowerShell中的date格式化为DayOfWeek Month Day(st|nd|rd|th) year格式。

(Get-Date).AddDays(+1).ToString('D')

输出为“2016年7月5日星期二” 但需要采用以下格式: 2016年7月5日星期二

if date(Get-Date) % 100 IN (11, 12, 13) THEN 'th'
    if (Get-Date) % 10 = 1 THEN 'st'
    if (Get-Date) % 10 = 2 THEN 'nd'
    if (Get-Date) % 10 = 3 THEN 'rd'

2 个答案:

答案 0 :(得分:4)

一种可能的解决方案可能如下所示

function Get-DateOrdinalSuffix([datetime]$Date) {
    switch -regex ($Date.Day.ToString()) {
        '1(1|2|3)$' { 'th'; break }
        '.?1$'      { 'st'; break }
        '.?2$'      { 'nd'; break }
        '.?3$'      { 'rd'; break }
        default     { 'th'; break }
    }
}

$d = (Get-Date).AddDays(1)
$suffix = Get-DateOrdinalSuffix $d
$dateFormatted = "{0} {1:MMMM} {2}{3} {4}" -f $d.DayOfWeek, $d, $d.Day, $suffix, $d.Year

答案 1 :(得分:1)

另一种不使用regex来获取日后缀的解决方案:

function Get-DaySuffix
{
    Param(
        [System.DateTime]$date
    )

    switch ($date.Day)
    {
        {$_ -in 1,21,31} { 'st'}
        {$_ -in 2,22} { 'nd'}
        {$_ -in 3,23} { 'rd'}
        Default {'th'}
    }
}

$date = (Get-Date).AddDays(1)
$output = $date.ToString('dddd MMMM d yyyy', [CultureInfo]::CreateSpecificCulture('en-US'))
$output -replace '( \d{4})$', ('{0}$1'-f (Get-DaySuffix $date))

<强>输出:

Tuesday July 5th 2016