所以我有一个以毫秒为单位的时间(之前从System.currentTimeMillis()获得)保存在long变量中。我现在需要的是一种确定时间是否在实际当前周内的方法。我需要以布尔值的形式获得结果。最好的方法是什么?
答案 0 :(得分: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在处理短期内非常有效对象。但你获得的是一个巨大的可读性奖金。
答案 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());
}