在Powershell中检索不带时间部分的日期时间对象

Nia*_*awv 6 powershell datetime

是否可以在 PowerShell 中仅检索日期时间对象的日期部分?原因是我需要将LastWriteTime文件的属性与今天的日期进行比较,以确定是否备份文件。按原样,日期时间对象还包括时间,当我执行以下操作时,该时间将始终评估为 false:

if ($fileDate -eq $currentDate) {
    # Do backup
}
Run Code Online (Sandbox Code Playgroud)

无论如何我还没有找到这样做。如果我们使用格式运算符或方法,它会将对象转换为字符串对象。如果您尝试将其转换回日期时间对象,它会将时间附加到该对象上。可能很简单,但我已经研究这个脚本一段时间了,这是最后一个被破坏的部分。

Sim*_*wsi 5

编辑:正如 @jessehouwing 在下面的评论中指出的那样,我的答案不必要地复杂。只需使用$datetime.Date.


有几种方法可以获取没有任何时间组件的 DateTime(即设置为相关日期开始时的午夜 00:00:00):

$dateTime = <some DateTime>
$dateWithoutTime = $dateTime.AddSeconds(-$dateTime.Second).AddMinutes(-$dateTime.Minute).AddHours(-$dateTime.Hour)
Run Code Online (Sandbox Code Playgroud)

或者

$dateTime = <some DateTime>
$dateWithoutTime = Get-Date -Date ($dateTime.ToString("yyyy-MM-dd"))
Run Code Online (Sandbox Code Playgroud)

我循环运行每个版本,迭代 100,000 次。第一个版本用时16.4秒,第二个版本用时26.5秒。所以我会选择第一个版本,尽管它看起来有点复杂。

基于此处找到的答案: https: //techibee.com/powershell/powershell-how-to-query-date-time-without-seconds/2737(该文章是关于从 DateTime 中删除秒数。但它可以是延长至剥离小时、分钟和秒)。

  • 为什么不直接采用 `(Get-Date).Date` (5认同)

Mar*_*nio 1

这不会回答如何删除日期时间上的时间,而是为了确定何时备份的验证目的。

我建议您减去两个给定的日期值,然后比较结果(如果已满足备份总小时数)。

if (( $currentDate - $fileDate ).TotalDays > 7) {
# Do Backup
}
Run Code Online (Sandbox Code Playgroud)

您还可以验证以下内容

Days              : 
Hours             : 
Minutes           : 
Seconds           : 
Milliseconds      : 
Ticks             :
TotalDays         : 
TotalHours        : 
TotalMinutes      : 
TotalSeconds      : 
TotalMilliseconds : 
Run Code Online (Sandbox Code Playgroud)