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

pxq42qpu  于 2022-12-18  发布在  Shell
关注(0)|答案(4)|浏览(90)

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

if ($fileDate -eq $currentDate) {
    # Do backup
}

我还没有找到这样的方法,如果我们使用格式操作符或者方法,它会把对象转换成字符串对象,如果你试图把它转换回datetime对象,它会把时间追加到对象上,可能很简单,但是我已经看了这个脚本一段时间了,这是最后一个部分。

jexiocij

jexiocij1#

假设$fileDate不是一个dateTime对象,那么您只需将两者都转换为字符串并设置其格式。

if ($fileDate.ToString() -eq $currentDate.ToString("dd/MM/yyyy")) {
    # Do backup
}
mjqavswn

mjqavswn2#

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

获取不带任何时间组件的DateTime的几种方法(即设置为所讨论日期开始时的午夜,00:00:00):

$dateTime = <some DateTime>
$dateWithoutTime = $dateTime.AddSeconds(-$dateTime.Second).AddMinutes(-$dateTime.Minute).AddHours(-$dateTime.Hour)

$dateTime = <some DateTime>
$dateWithoutTime = Get-Date -Date ($dateTime.ToString("yyyy-MM-dd"))

我在一个循环中运行每个版本,迭代10万次。第一个版本花了16.4秒,第二个版本花了26.5秒。所以我会选择第一个版本,尽管它看起来有点复杂。
基于以下答案:https://techibee.com/powershell/powershell-how-to-query-date-time-without-seconds/2737(那篇文章是关于从DateTime中剥离秒的,但是它可以扩展到剥离小时、分钟和秒)。

s4n0splo

s4n0splo3#

这不会回答如何删除datetime上的时间,但会完成识别何时备份的验证目的。
我确实建议减去你的两个给定的日期值,并比较结果,如果总小时数已经满足做你的备份。

if (( $currentDate - $fileDate ).TotalDays > 7) {
# Do Backup
}

您还可以验证以下内容

Days              : 
Hours             : 
Minutes           : 
Seconds           : 
Milliseconds      : 
Ticks             :
TotalDays         : 
TotalHours        : 
TotalMinutes      : 
TotalSeconds      : 
TotalMilliseconds :
umuewwlo

umuewwlo4#

假设$currentTime包含一个DateTime对象,您可以检索一个新的DateTime对象,该对象具有相同的日期,但时间部分为零,如下所示:

$midnight = Get-Date $currentTime -Hour 0 -Minute 0 -Second 0 -Millisecond 0

相关问题