0

所以我有一个以毫秒为单位的时间(之前从 System.currentTimeMillis() 获得)保存在一个长变量中。我现在需要的是一种方法来确定该时间是否在当前的实际一周内。我需要将结果作为布尔值获得。最好的方法是什么?

4

4 回答 4

2

乔达

new DateTime().weekOfWeekyear().toInterval().contains(millis);

您可以通过执行以下操作来检查它是否正确选择了整个星期

System.out.println(new DateMidnight(2011, 12, 31).weekOfWeekyear().toInterval());

哪个打印2011-12-26T00:00:00.000/2012-01-02T00:00:00.000。显示它已正确找到跨越年份边界的星期。请注意,默认情况下,Joda 将星期日视为一周的第一天。如果您需要的话,不确定您是否可以将其更改为星期一。

由于 Joda 对象是不可变的(只有少数情况不可变),它们通常寿命很短,并且在上述代码中几乎没有性能开销,因为默认 GC 在处理短寿命对象方面非常有效。但是你得到的是巨大的可读性奖励。

于 2011-07-18T00:20:54.413 回答
1
public static boolean withinThisRange(long milliseconds, Date startDate, Date endDate)
{
    Date date = new Date(milliseconds);
    return date.after(startDate) && date.before(endDate);
}
于 2011-07-17T22:53:20.273 回答
0

如果您必须使用 JavaSE API,我强烈建议您这样做。对于可能不是真正的 Java 人员并理解 WEEK_OF_YEAR 字段的噩梦的未来维护者来说,这更容易。

public static boolean isCurrentWeek(long time) {
    Calendar now = Calendar.getInstance();
    Calendar work = Calendar.getInstance();
    work.clear();
    work.set(Calendar.YEAR, now.get(Calendar.YEAR));
    work.set(Calendar.MONTH, now.get(Calendar.MONTH));
    work.set(Calendar.DATE, now.get(Calendar.DATE));
    work.getTime(); //force computation of WEEK_OF_MONTH
    work.set(Calendar.DAY_OF_WEEK, work.getFirstDayOfWeek());
    final Date start = work.getTime();
    work.add(Calendar.DAY_OF_YEAR, 7);
    final Date end = work.getTime();
    Date timeStamp = new Date(time);
    return timeStamp.before(end) && !timeStamp.before(start);
}
于 2011-07-18T00:39:51.297 回答
-1

获取当前周开始的毫秒时间,以及下周开始的毫秒时间。然后查看输入时间是否在这两个值之间:

public boolean isInCurrentWeek(long time) {
    Calendar cal1 = GregorianCalendar.getInstance();
    Calendar cal2;
    cal1.set(Calendar.DAY_OF_WEEK, 0);
    cal1.set(Calendar.HOUR_OF_DAY, 0);
    cal1.set(Calendar.MINUTE, 0);
    cal1.set(Calendar.SECOND, 0);
    cal1.set(Calendar.MILLISECOND, 0);
    cal2 = (GregorianCalendar) cal1.clone();
    cal2.add(Calendar.DATE, 7);
    return (time >= cal1.getTimeInMillis() && time < cal2.getTimeInMillis());
}
于 2011-07-18T00:34:54.973 回答