识别以毫秒为单位的时间是否在当前周内

时间:2011-07-17 22:44:07

标签: java milliseconds

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

4 个答案:

答案 0 :(得分:2)

Joda

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在处理短期内非常有效对象。但你获得的是一个巨大的可读性奖金。

答案 1 :(得分:1)

public static boolean withinThisRange(long milliseconds, Date startDate, Date endDate)
{
    Date date = new Date(milliseconds);
    return date.after(startDate) && date.before(endDate);
}

答案 2 :(得分: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);
}

答案 3 :(得分:-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());
}