Compare Timestamp with another Timestamp object
我是Java的新手。 我正在使用两个Timestamp对象dateFrom和dateTo。 我想检查dateFrom是否比dateTo早45天。 我使用这段代码片段进行比较
if(dateFrom.compareTo(dateTo) < 45)
{
// do the action;
}
我对代码中给出的45感到困惑。 我可以期待正确的结果吗? 它会符合我的结果吗?
-
应该对你有意思:docs.oracle.com/javase/7/docs/api/java/lang/…
-
你为什么不运行代码并自己检查?! 会更快,你自己想出了结果。
-
通常的.compareTo(...)返回值是一个值"小于零,小于等于零,大于零大于零",我不相信你可以指望通过使用获得精确的差异量 这个功能。 相反,你应该使用idiom dateFrom.compareTo(dateTo.add("45 days")),除了实际代码而不是伪代码。
你必须从逻辑上考虑一下。首先,您需要到达dateTo日期前45天的时间戳。时间有各种单位(秒,分钟,小时,天),所以在这种情况下只检查< 45是没有意义的。 compareTo()方法只是用于命令知道时间戳是在另一个之前还是之后。
您可以先为时间戳创建Calendar,然后在45天内添加()dateFrom。然后,您可以使用before()方法检查dateFrom是否在dateTo之前。
-
谢谢@jbx。它清除了我对compareTo()方法的查询。
compareTo()返回-1,0或1的值,具体取决于结果。
你想做的是
1 2 3 4 5 6
| long result = dateTo. getTime() - (1000 * 60 * 60 * 24 * 45) - dateFrom. getTime();
if(result >= 0) {
System. out. println("dateFrom is 45 days or more before dateTo");
else {
System. out. println("dateFrom is less than 45 days before dateTo");
} |
但这很难看。您是否有使用Calendar的具体原因?
-
手动添加秒数很危险。有些事件改变了时间表,你知道吗?
-
是的,我们都读过Jon Skeet的着名答案。我认为可以安全地假设OP不会处理这些极端边缘情况。如果他这样做,那么他应该用一种实际的好方法来处理像Joda Time或Calendar这样的时间。
-
工作正常:)谢谢@JeroenVannevel
-
@Jeroen:1000 * 60 * 24 * 45不是45天内的毫秒数 - 45 * 24 * 3600 * 1000是正确的数字
-
它的正确@Artur。他只是错过了60倍。
-
@Artur:下次可以随意编辑。你说的没错。
这样做
使用Joda Time或Calendar类(添加45天到dateFrom,将结果与dateTo进行比较)。
-
Joda是一个不错的选择,但我们可以用Timestamp本身来做吗?
-
如果你问我,@ Saj日历课也很好。
由于Java中的时间戳是从UNIX纪元开始的毫秒数 - 将45天更改为毫秒数(45d = 45 * 24h = 45 * 24 * 3600s = 45 * 24 * 3600 * 1000ms),因此:
1
| (time_B + 45*24*3600*1000) >= time_A |
这意味着time_B与time_A的时间相差45天(或更长)
当然你也可以使用JodaTime和其他库。
-
手动添加秒数很危险。有些事件改变了时间表,你知道吗?
-
是的我知道时区,夏令时等问题 - 其中一些问题甚至无法使用花哨的库解决,这对大多数情况都适用。
-
嘿伙计们 - 为什么这么多的投票?选定的答案在45天内有不正确的毫秒计算,而且我的答案是正确的 - 所以那是什么呢?
-
我没有投票,但你的回答并不完全正确,我们之前谈过这个问题。
-
@Silviu:我直接提到你,但总的来说;-)。我知道这个答案甚至没有涉及日期/时间操作可能引起的问题。我只是好奇为什么我多次被投票 - 但是没关系。有许多底池描述SO上的潜在问题 - 例如stackoverflow.com/questions/13698779/…
-
PHP无论如何都很糟糕:)