【发布时间】:2019-04-11 17:40:03
【问题描述】:
我有一个对象,其成员具有开始日期时间和结束日期时间
class MyObject {
DateTime start;
DateTime end;
public MyObject(String isoUtcStart, String isoUtcEnd) {
this.start = new DateTime(isoUtcStart);
this.end = new DateTime(isoUtcEnd);
}
}
我想要确定我们现在是否在这些时刻的范围内。
我这样做如下:
public boolean isWithinCurrentTime(MyObject o) {
DateTime now = DateTime.now(DateTimeZone.UTC);
return (o.getStart().isBefore(now) || o.getStart().isEqual(now))
&& (o.getEnd().isAfter(now) || o.getEnd().isEqual(now));
}
不过,这似乎有点矫枉过正。有没有更好的办法?我的意思是:
- 有没有类似
isBeforeOrEqual的东西?找不到这样的方法 - 和
o.getStart().isBeforeNow()有区别吗?不确定这是否相同,即 UTC 比较 - 转移到
long比较 (getmillis) 是一种更明智的方法吗?
【问题讨论】:
-
我不认为 isEqual() 是必要的。使用
datetime对象的分辨率,这些情况几乎永远不会发生。仅当您将当前时间限制为一天中的某个时间时,您才需要这样做。 -
@Steve: 可能我错过了你的意思,但由于
start包含小时和分钟,排除now的时间和分钟完全相同的可能性不是错误的? -
它包含的不止这些。它至少下降到毫秒。
-
这个问题作为另一个问题被关闭,但在另一个问题中没有解释是否使用 UTC
-
几乎相反。
LocalDateTime没有任何时区,因此没有在时间线上定义一个点。DateTime有一个 UTC 偏移量(不是时区)并且确实定义了一个时间点。