From 6594b78e65c07a61b9b62eee97105c081cdeab2e Mon Sep 17 00:00:00 2001 From: Brian Lalonde Date: Tue, 5 Jan 2021 15:24:31 -0800 Subject: [PATCH 1/4] #4750 Fix Get-Date -UFormat %u behavior --- .../commands/utility/GetDateCommand.cs | 10 ++++- .../Get-Date.Tests.ps1 | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs index 241c49a989f..3c88d02aefc 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs @@ -516,7 +516,15 @@ private string UFormatDateString(DateTime dateTime) break; case 'u': - sb.Append((int)dateTime.DayOfWeek); + if (dateTime.DayOfWeek == DayOfWeek.Sunday) + { + sb.Append(7); + } + else + { + sb.Append((int)dateTime.DayOfWeek); + } + break; case 'V': diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 index 87670b0529b..a1e60763f3a 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 @@ -97,6 +97,49 @@ Describe "Get-Date DRT Unit Tests" -Tags "CI" { Get-Date -Date $date -UFormat %V | Should -BeExactly $week } + It "using -uformat 'u' produces the correct output" -TestCases @( + @{date="1998-01-02"; dayOfWeek = "5"}, + @{date="1998-01-03"; dayOfWeek = "6"}, + @{date="2003-01-03"; dayOfWeek = "5"}, + @{date="2004-01-02"; dayOfWeek = "5"}, + @{date="2004-01-03"; dayOfWeek = "6"}, + @{date="2005-01-01"; dayOfWeek = "6"}, + @{date="2005-01-02"; dayOfWeek = "7"}, + @{date="2005-12-31"; dayOfWeek = "6"}, + @{date="2006-01-01"; dayOfWeek = "7"}, + @{date="2006-01-02"; dayOfWeek = "1"}, + @{date="2006-12-31"; dayOfWeek = "7"}, + @{date="2007-01-01"; dayOfWeek = "1"}, + @{date="2007-12-30"; dayOfWeek = "7"}, + @{date="2007-12-31"; dayOfWeek = "1"}, + @{date="2008-01-01"; dayOfWeek = "2"}, + @{date="2008-12-28"; dayOfWeek = "7"}, + @{date="2008-12-29"; dayOfWeek = "1"}, + @{date="2008-12-30"; dayOfWeek = "2"}, + @{date="2008-12-31"; dayOfWeek = "3"}, + @{date="2009-01-01"; dayOfWeek = "4"}, + @{date="2009-01-02"; dayOfWeek = "5"}, + @{date="2009-01-03"; dayOfWeek = "6"}, + @{date="2009-12-31"; dayOfWeek = "4"}, + @{date="2010-01-01"; dayOfWeek = "5"}, + @{date="2010-01-02"; dayOfWeek = "6"}, + @{date="2010-01-03"; dayOfWeek = "7"}, + @{date="2010-01-04"; dayOfWeek = "1"}, + @{date="2014-01-03"; dayOfWeek = "5"}, + @{date="2015-01-02"; dayOfWeek = "5"}, + @{date="2015-01-03"; dayOfWeek = "6"}, + @{date="2020-01-03"; dayOfWeek = "5"}, + @{date="2021-01-03"; dayOfWeek = "7"}, + @{date="2021-01-04"; dayOfWeek = "1"}, + @{date="2025-01-03"; dayOfWeek = "5"}, + @{date="2026-01-02"; dayOfWeek = "5"}, + @{date="2026-01-03"; dayOfWeek = "6"}, + @{date="2031-01-03"; dayOfWeek = "5"} + ) { + param($date, $dayOfWeek) + Get-Date -Date $date -UFormat %u | Should -BeExactly $dayOfWeek + } + It "Passing '' to -uformat produces a descriptive error" -TestCases @( @{ name = "`$null" ; value = $null; errorId = "ParameterArgumentValidationErrorNullNotAllowed" } @{ name = "empty string"; value = ""; errorId = "ParameterArgumentValidationErrorEmptyStringNotAllowed" } From 9e0bd611f285ee769886c9c3f52262ce8bcafbd1 Mon Sep 17 00:00:00 2001 From: Brian Lalonde Date: Wed, 6 Jan 2021 08:36:42 -0800 Subject: [PATCH 2/4] Changes from PR feedback --- .../commands/utility/GetDateCommand.cs | 10 +--------- .../Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 | 3 +-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs index 3c88d02aefc..ae2e7c59e08 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs @@ -516,15 +516,7 @@ private string UFormatDateString(DateTime dateTime) break; case 'u': - if (dateTime.DayOfWeek == DayOfWeek.Sunday) - { - sb.Append(7); - } - else - { - sb.Append((int)dateTime.DayOfWeek); - } - + sb.Append(StringUtil.Format("{0:0;0;\7}", (int)dateTime.DayOfWeek)); break; case 'V': diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 index a1e60763f3a..2a24264b28e 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1 @@ -97,6 +97,7 @@ Describe "Get-Date DRT Unit Tests" -Tags "CI" { Get-Date -Date $date -UFormat %V | Should -BeExactly $week } + # Using the same test cases as V for ISO week date component parity It "using -uformat 'u' produces the correct output" -TestCases @( @{date="1998-01-02"; dayOfWeek = "5"}, @{date="1998-01-03"; dayOfWeek = "6"}, @@ -129,8 +130,6 @@ Describe "Get-Date DRT Unit Tests" -Tags "CI" { @{date="2015-01-02"; dayOfWeek = "5"}, @{date="2015-01-03"; dayOfWeek = "6"}, @{date="2020-01-03"; dayOfWeek = "5"}, - @{date="2021-01-03"; dayOfWeek = "7"}, - @{date="2021-01-04"; dayOfWeek = "1"}, @{date="2025-01-03"; dayOfWeek = "5"}, @{date="2026-01-02"; dayOfWeek = "5"}, @{date="2026-01-03"; dayOfWeek = "6"}, From ebea06374a890634a23afa9afa9a4570a2ee8e0b Mon Sep 17 00:00:00 2001 From: Brian Lalonde Date: Wed, 6 Jan 2021 09:07:58 -0800 Subject: [PATCH 3/4] Readability change as discussed in PR --- .../commands/utility/GetDateCommand.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs index ae2e7c59e08..55369bf953b 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs @@ -516,7 +516,8 @@ private string UFormatDateString(DateTime dateTime) break; case 'u': - sb.Append(StringUtil.Format("{0:0;0;\7}", (int)dateTime.DayOfWeek)); + var dayOfWeek = dateTime.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)dateTime.DayOfWeek; + sb.Append(dayOfWeek); break; case 'V': From c7df635688ea55cec6c5880663f42befb42baa08 Mon Sep 17 00:00:00 2001 From: Brian Lalonde Date: Tue, 2 Feb 2021 17:12:16 -0800 Subject: [PATCH 4/4] Update src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs Co-authored-by: Robert Holt --- .../commands/utility/GetDateCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs index 55369bf953b..aecb011cab1 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs @@ -516,7 +516,7 @@ private string UFormatDateString(DateTime dateTime) break; case 'u': - var dayOfWeek = dateTime.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)dateTime.DayOfWeek; + int dayOfWeek = dateTime.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)dateTime.DayOfWeek; sb.Append(dayOfWeek); break;