8000 Use ISOWeek for week numbers in Get-Date (#11536) · PowerShell/PowerShell@7f31fd5 · GitHub
[go: up one dir, main page]

Skip to content 8000

Commit 7f31fd5

Browse files
paalbradaxian-dbw
authored andcommitted
Use ISOWeek for week numbers in Get-Date (#11536)
1 parent f4c759c commit 7f31fd5

File tree

2 files changed

+17
-29
lines changed

2 files changed

+17
-29
lines changed

src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -474,34 +474,7 @@ private string UFormatDateString(DateTime dateTime)
474474
break;
475475

476476
case 'V':
477-
// .Net Core doesn't implement ISO 8601.
478-
// So we use workaround from https://blogs.msdn.microsoft.com/shawnste/2006/01/24/iso-8601-week-of-year-format-in-microsoft-net/
479-
// with corrections from comments
480-
481-
// Culture doesn't matter since we specify start day of week
482-
var calender = CultureInfo.InvariantCulture.Calendar;
483-
var day = calender.GetDayOfWeek(dateTime);
484-
var normalizedDatetime = dateTime;
485-
486-
switch (day)
487-
{
488-
case DayOfWeek.Monday:
489-
case DayOfWeek.Tuesday:
490-
case DayOfWeek.Wednesday:
491-
normalizedDatetime = dateTime.AddDays(3);
492-
break;
493-
494-
case DayOfWeek.Friday:
495-
case DayOfWeek.Saturday:
496-
case DayOfWeek.Sunday:
497-
normalizedDatetime = dateTime.AddDays(-3);
498-
break;
499-
}
500-
501-
// FirstFourDayWeek and DayOfWeek.Monday is from ISO 8601
502-
sb.Append(StringUtil.Format("{0:00}", calender.GetWeekOfYear(normalizedDatetime,
503-
CalendarWeekRule.FirstFourDayWeek,
504-
DayOfWeek.Monday)));
477+
sb.Append(StringUtil.Format("{0:00}", ISOWeek.GetWeekOfYear(dateTime)));
505478
break;
506479

507480
case 'W':

test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ Describe "Get-Date DRT Unit Tests" -Tags "CI" {
5252

5353
# The 'week of year' test cases is from https://en.wikipedia.org/wiki/ISO_week_date
5454
It "using -uformat 'V' produces the correct output" -TestCases @(
55+
@{date="1998-01-02"; week = "01"},
56+
@{date="1998-01-03"; week = "01"},
57+
@{date="2003-01-03"; week = "01"},
58+
@{date="2004-01-02"; week = "01"},
59+
@{date="2004-01-03"; week = "01"},
5560
@{date="2005-01-01"; week = "53"},
5661
@{date="2005-01-02"; week = "53"},
5762
@{date="2005-12-31"; week = "52"},
@@ -67,11 +72,21 @@ Describe "Get-Date DRT Unit Tests" -Tags "CI" {
6772
@{date="2008-12-30"; week = "01"},
6873
@{date="2008-12-31"; week = "01"},
6974
@{date="2009-01-01"; week = "01"},
75+
@{date="2009-01-02"; week = "01"},
76+
@{date="2009-01 8000 -03"; week = "01"},
7077
@{date="2009-12-31"; week = "53"},
7178
@{date="2010-01-01"; week = "53"},
7279
@{date="2010-01-02"; week = "53"},
7380
@{date="2010-01-03"; week = "53"},
74-
@{date="2010-01-04"; week = "01"}
81+
@{date="2010-01-04"; week = "01"},
82+
@{date="2014-01-03"; week = "01"},
83+
@{date="2015-01-02"; week = "01"},
84+
@{date="2015-01-03"; week = "01"},
85+
@{date="2020-01-03"; week = "01"},
86+
@{date="2025-01-03"; week = "01"},
87+
@{date="2026-01-02"; week = "01"},
88+
@{date="2026-01-03"; week = "01"},
89+
@{date="2031-01-03"; week = "01"}
7590
) {
7691
param($date, $week)
7792
Get-date -Date $date -uformat %V | Should -BeExactly $week

0 commit comments

Comments
 (0)
0