【发布时间】:2021-04-20 05:55:32
【问题描述】:
以下代码根据用户偏好计算完整的 ISO 日期或 ISO 周。 $Year、$Month 和 $Day 设置为整数。 $Week 没有被设置为任何东西。如果我将 $Week 设置为整数,则代码不会将前导零添加到周数,这不是交易杀手,但 ISO 周通常以这种方式格式化。如果我将其设置为字符串,则会导致错误。作为更好的做法,我可以使用单独的变量来添加前导零并在两个可能的结果中的任何一个中使用该变量,但我真正想知道的是我应该如何引用它。我会称它为 VB 语言的变体,但它在 PowerShell 中叫什么?
Function Get-ISODate {
Param(
[datetime]$Date = (Get-Date),
[switch]$LongFormat
)
[int]$Year = $Date.Year
[int]$Month = $Date.Month
[int]$Day = $Date.DayOfWeek.value__
If ($Day -eq 0) {$Day = 7}
If ($Day -ge 1 -and $Day -le 3) {$Date = $Date.AddDays(3)}
$Week = (Get-Culture).Calendar.GetWeekOfYear($Date, 'FirstFourDayWeek', 'Monday')
Switch ($Week)
{
52 {If ($Day -ge 5 -and $Day -le 7 -and $Month -ne 12) {$Year = $Year - 1} ; Break}
53 {If ($Day -ge 5 -and $Day -le 7 -and $Month -ne 12) {$Year = $Year - 1} ; Break}
1 {If ($Month -eq 12) {$Year = $Year + 1} ; Break}
}
$Week = $Week.ToString('00')
If ($LongFormat.IsPresent)
{
"$Year-W$Week-$Day"
}
Else
{
"W$Week"
}
}
【问题讨论】:
-
您仍然可以使用
[int]变量并在需要时使用它进行计算,如果您只在需要的输出中使用所需的格式,则使用前导零。如果您需要前导零,您可以使用-f(格式)运算符。 ...如果我说对了。 ;-) -
谢谢奥拉夫。我以前见过 -f ,但我不确定如何使用它。我可以直接用
"$Year-W$Week-$Day"和"W$Week"做吗? -
如果我做对了,您可以将其用于您的
-LongFormat输出:'{0}-W{1:d2}-{2:d2}' -f $Year, $Week, $Day -
你能告诉我在哪里编辑代码吗?我将不胜感激,因为我仍然是 PowerShell 新手。
-
把这个
"$Year-W$Week-$Day"改成这个'{0}-W{1:d2}-{2:d2}' -f $Year, $Week, $Day
标签: powershell