Skip to content

Commit

Permalink
Get-Date -UFormat %U does not match reference implementation
Browse files Browse the repository at this point in the history
Fixes #20977
  • Loading branch information
brianary committed Jan 20, 2024
1 parent f0076b9 commit cc67af3
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
Expand Up @@ -511,7 +511,9 @@ private string UFormatDateString(DateTime dateTime)
break;

case 'U':
sb.Append(dateTime.DayOfYear / 7);
var formatUStartOfYear = new DateTime(dateTime.Year, 1, 1);
var formatUOffset = ((int)formatUStartOfYear.DayOfWeek + 6) % 7;
sb.AppendFormat("{0:00}", (formatUOffset + dateTime.DayOfYear - (int)dateTime.DayOfWeek) / 7);
break;

case 'u':
Expand Down
Expand Up @@ -52,7 +52,58 @@ Describe "Get-Date DRT Unit Tests" -Tags "CI" {
}

It "using -uformat 'sStTuUVwWxXyYZ' produces the correct output" {
Get-Date -Date 1/1/0030 -UFormat %S%T%u%U%w%W%x%X%y%Y%% | Should -Be "0000:00:00202001/01/3000:00:00300030%"
Get-Date -Date 1/1/0030 -UFormat %S%T%u%U%w%W%x%X%y%Y%% | Should -Be "0000:00:002002001/01/3000:00:00300030%"
}

# Alternate 'week of year' test cases, generated by using `date -d $date +%U` on linux
It "using -uformat 'U' produces the correct output (<date>:<week>)" -TestCases @(
@{date="1999-10-17"; week = "42" },
@{date="2000-03-08"; week = "10" },
@{date="2000-08-10"; week = "32" },
@{date="2001-01-10"; week = "01" },
@{date="2002-02-22"; week = "07" },
@{date="2003-02-23"; week = "08" },
@{date="2004-01-11"; week = "02" },
@{date="2004-07-13"; week = "28" },
@{date="2005-02-08"; week = "06" },
@{date="2005-07-04"; week = "27" },
@{date="2005-12-06"; week = "49" },
@{date="2006-04-09"; week = "15" },
@{date="2006-08-17"; week = "33" },
@{date="2006-12-25"; week = "52" },
@{date="2008-02-06"; week = "05" },
@{date="2009-02-06"; week = "05" },
@{date="2009-09-14"; week = "37" },
@{date="2010-03-06"; week = "09" },
@{date="2010-09-14"; week = "37" },
@{date="2011-02-20"; week = "08" },
@{date="2011-07-19"; week = "29" },
@{date="2011-12-21"; week = "51" },
@{date="2012-04-20"; week = "16" },
@{date="2012-08-28"; week = "35" },
@{date="2013-01-05"; week = "00" },
@{date="2014-01-05"; week = "01" },
@{date="2014-08-25"; week = "34" },
@{date="2015-03-24"; week = "12" },
@{date="2015-12-08"; week = "49" },
@{date="2016-05-08"; week = "19" },
@{date="2016-11-17"; week = "46" },
@{date="2017-04-02"; week = "14" },
@{date="2017-08-09"; week = "32" },
@{date="2017-12-17"; week = "51" },
@{date="2019-01-31"; week = "04" },
@{date="2020-01-31"; week = "04" },
@{date="2020-11-23"; week = "47" },
@{date="2021-05-05"; week = "18" },
@{date="2021-11-16"; week = "46" },
@{date="2022-04-04"; week = "14" },
@{date="2022-09-06"; week = "36" },
@{date="2023-01-30"; week = "05" },
@{date="2023-06-04"; week = "23" },
@{date="2023-10-11"; week = "41" }
) {
param($date, $week)
Get-Date -Date $date -UFormat %U | Should -BeExactly $week
}

# The 'week of year' test cases is from https://en.wikipedia.org/wiki/ISO_week_date
Expand Down

0 comments on commit cc67af3

Please sign in to comment.