使用.AddDays()
后,我找不到格式化日期的方法
代码
[datetime] $searchDate = '2020-01-10'
$searchDate = '{0:yyyy-MM-dd}' -f $searchDate.AddDays(1)
返回";2020年1月11日星期六凌晨12:00:00;而我正在寻找2020-01-11
tl;dr
# NOTE: [datetime] must be on the RHS if you want to assign a different type later.
$searchDate = [datetime] '2020-01-10'
$searchDate = '{0:yyyy-MM-dd}' -f $searchDate.AddDays(1)
当然,你可以把它合并成一个单独的任务:
$searchDate = '{0:yyyy-MM-dd}' -f ([datetime] '2020-01-10').AddDays(1)
或者,通过Get-Date
:
$searchDate = Get-Date ([datetime] '2020-01-10').AddDays(1) -Format yyyy-MM-dd
您自己的解决方案只是绕过代码的概念问题,Jeroen Mostert在对该问题的评论中很好地描述了这一点。
[datetime] $searchDate = '2020-01-10'
通过将强制转换([datetime]
(放置在赋值中变量($searchDate
(的左侧,可以类型约束。
这意味着以后分配给的任何值都会被始终隐式强制(转换(为指定的类型(在这种情况下为[datetime]
(。
因此,您不能使用相同的变量来分配通过-f
运算符获得的日期的字符串表示,因为该字符串表示会自动重新转换为[datetime]
。也就是说,在执行$searchDate = '{0:yyyy-MM-dd}' -f $searchDate.AddDays(1)
之后,$searchData
再次包含[datetime]
实例,而不是感兴趣的字符串。
另一种解决方案是简单地分配给不同的变量,该变量要么不受类型约束,要么受[string]
约束。
用Get-Date $searchDate -Format yyyy-MM-dd
求解