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