我正在奔波运行,但我想这可能是一个更普遍的问题。
我在首选项中保存了一个DateTime。我希望能够在上至少最后一次保存的DateTime之后的第二天,告诉DateTime.now()
是否在上。(pseudocode)
lastDailyCheck = 2020.04.10
now = 2020.04.11
=>现在是lastDailyCheck之后的一天。
即使在新的一天是00:01,即使lastDailyCheck是在前一天的23:58,这也应该已经可以工作,这意味着两个DateTime之间的差可以低至分钟。
原来,这真的很复杂!
这是行不通的:DateTime.Now().isAfter(lastDailyCheck)
这只会检查现在是否在最后一个之后,也将在第二天和同一天返回true。DateTime.Now().isAfter(lastDailyCheck) && lastDailyCheck.day != DateTime.Now().day
我以为这很聪明。如果日期不同,并且最后一天是之后的,则它确实可以识别出是一天后的一天-但后来我意识到当两个月的15日都说完时,它会出错-然后lastDailyCheck.day
将等于DateTime.Now().day
。
您认为这里有什么可能?
最佳答案
我不知道 flutter 打,但我的方法是不存储上一张支票,而是存储下一张应发生的日期。因此,当您执行检查时,您将计算下一个午夜并将其存储。现在您可以使用isAfter。
在javascript中,它看起来像这样:
const now = new Date();
//this also handles overflow into the next month
const nextCheck = new Date(now.getYear(), now.getMonth(), now.getDate() + 1)
//store nextCheck somewhere
//in js there is no isAfter, you just use >
if(new Date() > nextCheck) {
//do the thing
}
当然,您也可以在每次比较时都计算
nextCheck
,但是如果可以避免,我不希望一遍又一遍地执行相同的计算。这里要提到的是时区,具体取决于您的日期库,并且如果系统和用户时区对齐,则可能需要更改日期。
关于date - 我如何判断DateTime.Now()是否在其他DateTime之后的一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61266922/