我想获得给定日期一周的最后一周和第一周。例如,如果日期是 2011 年 10 月 12 日,那么我需要 2011 年 10 月 10 日(作为一周的开始日期)和 2011 年 10 月 16 日(作为一周的结束日期)的日期有谁知道如何使用日历获取这两个日期类(java.util.Calendar)非常感谢!
问问题
26124 次
5 回答
35
一些代码如何处理Calendar
对象。我还应该提到joda time library,因为它可以帮助您解决许多Date/Calendar
问题。
代码
public static void main(String[] args) {
// set the date
Calendar cal = Calendar.getInstance();
cal.set(2011, 10 - 1, 12);
// "calculate" the start date of the week
Calendar first = (Calendar) cal.clone();
first.add(Calendar.DAY_OF_WEEK,
first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK));
// and add six days to the end date
Calendar last = (Calendar) first.clone();
last.add(Calendar.DAY_OF_YEAR, 6);
// print the result
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(first.getTime()) + " -> " +
df.format(last.getTime()));
}
于 2011-10-04T08:39:52.537 回答
2
此解决方案适用于任何语言环境(一周的第一天可能是星期日或星期一)。
Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - c.getFirstDayOfWeek();
c.add(Calendar.DAY_OF_MONTH, -dayOfWeek);
Date weekStart = c.getTime();
// we do not need the same day a week after, that's why use 6, not 7
c.add(Calendar.DAY_OF_MONTH, 6);
Date weekEnd = c.getTime();
例如,今天是 2014 年 1 月 29 日。对于以星期日为一周第一天的语言环境,您将获得:
start: 2014-01-26
end: 2014-02-01
对于以星期一为第一天的语言环境,日期将为:
start: 2014-01-27
end: 2014-02-02
于 2014-01-29T12:32:54.313 回答
1
如果你想要所有日期然后
first.add(Calendar.DAY_OF_WEEK,first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK));
for (int i = 1; i <= 7; i++) {
System.out.println( i+" Day Of that Week is",""+first.getTime());
first.add(Calendar.DAY_OF_WEEK,1);
}
于 2013-03-21T09:35:26.257 回答
1
这是示例代码
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2016, 2, 15);
{
Calendar startCal = Calendar.getInstance();
startCal.setTimeInMillis(cal.getTimeInMillis());
int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK);
startCal.set(Calendar.DAY_OF_MONTH,
(startCal.get(Calendar.DAY_OF_MONTH) - dayOfWeek) + 1);
System.out.println("end date : " + startCal.getTime());
}
{
Calendar endCal = Calendar.getInstance();
endCal.setTimeInMillis(cal.getTimeInMillis());
int dayOfWeek = endCal.get(Calendar.DAY_OF_WEEK);
endCal.set(Calendar.DAY_OF_MONTH, endCal.get(Calendar.DAY_OF_MONTH)
+ (7 - dayOfWeek));
System.out.println("start date : " + endCal.getTime());
}
}
这将打印
start date : Sun Mar 13 20:30:30 IST 2016
end date : Sat Mar 19 20:30:30 IST 2016
于 2016-03-19T15:01:20.560 回答
0
我发现接受答案中的公式仅在某些情况下有效。例如,您的一周从星期六开始,今天是星期日。为了到达一周的第一天,我们往回走 1 天,但公式cal.get(Calendar.DAY_OF_WEEK) - cal.getFirstDayOfWeek()
将给出答案 -6。解决方案是使用模数,因此可以说公式环绕。
int daysToMoveToStartOfWeek = (
7 +
cal.get(Calendar.DAY_OF_WEEK) -
cal.getFirstDayOfWeek()
)%7;
cal.add(Calendar.DAY_OF_WEEK, -1 * daysToMoveToStartOfWeek);
于 2017-08-28T14:21:21.220 回答