mat*_*ode 4 datetime date dart flutter
我在 flutter 上运行这个,但我想这可能是一个更普遍的问题。
我正在首选项中保存日期时间。我希望能够判断是否DateTime.now()在上次保存的日期时间后至少一天,即
(pseudocode)
lastDailyCheck = 2020.04.10
now = 2020.04.11
Run Code Online (Sandbox Code Playgroud)
=> 现在是上次每日检查后的一天。
如果新的一天是 00:01,即使最后一次每日检查是在前一天的 23:58,这也应该已经起作用,这意味着 2 个日期时间之间的差异可以低至分钟。
事实证明这真的很复杂!
DateTime.Now().isAfter(lastDailyCheck)
这只检查现在是否在最后一个之后,它也会在一秒钟后和同一天返回 true。
DateTime.Now().isAfter(lastDailyCheck) && lastDailyCheck.day != DateTime.Now().day
我认为这很聪明。如果这一天不同并且是在最后一天之后,那么它确实可以识别出这是一天之后的事情 - 但后来我意识到当这两天都在该月的 15 日时,它会出错 - 那么lastDailyCheck.day就会相等DateTime.Now().day。
您认为这里可能会发生什么?
小智 5
我不知道颤振,但我的方法是不存储最后一次检查,而是存储下一次检查应该发生的日期。因此,当您执行检查时,您会计算下一个午夜并将其存储起来。现在您可以使用 isAfter。
在 JavaScript 中,这看起来像这样:
const now = new Date();
//this also handles overflow into the next month
const nextCheck = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1)
//store nextCheck somewhere
//in js there is no isAfter, you just use >
if(new Date() > nextCheck) {
//do the thing
}
Run Code Online (Sandbox Code Playgroud)
当然,你也可以nextCheck每次想要比较时都进行计算,但如果可以避免的话,我不喜欢一遍又一遍地执行相同的计算。
这里要提到的是时区,具体取决于您的日期库,如果您的系统和用户时区一致,您可能需要更改日期。
| 归档时间: |
|
| 查看次数: |
7530 次 |
| 最近记录: |