我希望接下来三周的最后一天。
例如,如果今天是4月16日星期三,我将在5月4日星期日得到结果。
我写了一个像这样的函数
public static Date nexThreeWeekEnd() {
Date now = new Date();
Date nextWeeks = DateUtils.truncate(DateUtils.addWeeks(now, 3), Calendar.DATE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(nextWeeks);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_WEEK));
return calendar.getTime();
}
此库中使用了DateUtils:
org.apache.commons.lang.time.DateUtils;
但是这个功能将于5月7日星期三返回,这意味着它将完全返回当前日期。
没有必要重写我的功能。解决我的问题的任何其他方式将非常适合。 谢谢。
答案 0 :(得分:1)
使用下面的代码希望它有所帮助
Calendar cal = Calendar.getInstance();
int currentDay = cal.get(Calendar.DAY_OF_WEEK);
int leftDays= Calendar.SUNDAY - currentDay;
cal.add(Calendar.DATE, leftDays)
答案 1 :(得分:1)
试试:
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
c.add(Calendar.WEEK_OF_YEAR, 2);
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(df.format(c.getTime()));
输出:
2014/05/04
答案 2 :(得分:1)
您可以这样做:
Calendar calendar = Calendar.getInstance().getFirstDayOfWeek();
calendar.add(Calendar.WEEK_OF_YEAR, 4);
calendar.add(Calendar.DAY_OF_MONTH, -1);
答案 3 :(得分:1)
在Java中我们可以使用公历
请检查以下代码是否可以帮助您
Date d = new Date();
GregorianCalendar cal1 = new GregorianCalendar();
cal1.setTime(d);
System.out.println(cal1.getTime());
int day = cal1.get(Calendar.DAY_OF_WEEK );
cal1.add(Calendar.DAY_OF_YEAR,-(day-1));/*go to start of the week*/
cal1.add(Calendar.WEEK_OF_YEAR,3); // add 3 weeks
day = cal1.get(Calendar.DAY_OF_MONTH );// get the end Day of the 3rd week
System.out.println("end of the 3rd week ="+day);
答案 4 :(得分:1)
问题和其他答案使用旧的过时类。
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦的日期时间类,如java.util.Date
& .Calendar
。见Oracle Tutorial。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
LocalDate
类表示没有时间和时区的仅限日期的值。您可以使用TemporalAdjuster
生成相对于原始值的新LocalDate
值。 TemporalAdjusters
(注意复数)类实现了几个方便的调整器,包括我们需要的调整器nextOrSame( WeekOfDay )
。 WeekOfDay
课程是一个方便的枚举,代表星期一至星期日的每周七天。
LocalDate start = LocalDate.of ( 2014 , Month.APRIL , 16 );
LocalDate nextOrSameSunday = start.with ( TemporalAdjusters.nextOrSame ( DayOfWeek.SUNDAY ) );
LocalDate twoWeeksAfterNextOrSameSunday = nextOrSameSunday.plusWeeks ( 2 );
转储到控制台。
System.out.println ( "start: " + start + " | nextOrSameSunday: " + nextOrSameSunday + " | twoWeeksAfterNextOrSameSunday: " + twoWeeksAfterNextOrSameSunday );
开始:2014-04-16 | nextOrSameSunday:2014-04-20 | twoWeeksAfterNextOrSameSunday:2014-05-04