简体   繁体   English

如何从今天开始获取最后两个星期五的日期?

[英]how to get date of last two Fridays from today?

I need to get the dates of last two Fridays using today's date.This is the code I'm currently using public class GetDate { 我需要使用今天的日期来获取最近两个星期五的日期。这是我当前使用的公共类GetDate {

public static void main(String[] args) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dt = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(dt);
    System.out.println("today : " + sdf.format(dt));
    while (c.get(Calendar.DAY_OF_WEEK) != 6) {
        c.add(Calendar.DATE, -1);
    }
    Date lastFri=c.getTime();
    System.out.println("last fri : "+sdf.format(lastFri));
    c.add(Calendar.DATE, -7);
    Date prevFri = c.getTime();
    System.out.println("previous friday : "+sdf.format(prevFri));

    }


}

Is there any way to optimize this code?? 有什么方法可以优化此代码?

With Java 8, and if you don't have to use the Calendar api, you can use a TemporalAdjuster : 在Java 8,如果你没有使用日历API,你可以使用一个TemporalAdjuster

LocalDate today = LocalDate.now();
LocalDate prevFriday = today.with(previous(FRIDAY));
LocalDate prevPrevFriday = prevFriday.with(previous(FRIDAY));

note: requires the following static import 注意:需要以下静态导入
import static java.time.temporal.TemporalAdjusters.previous;
import static java.time.DayOfWeek.FRIDAY;

You could get the last Friday this way : 您可以这样获得最后一个星期五:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.WEEK_OF_YEAR, -1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

This gets the last Friday by subtracting a week and setting the day of week to Friday. 通过减去一个星期并将星期几设置为星期五,可以得到最后一个星期五。

Try something like: 尝试类似:

cal.add(Calendar.WEEK_OF_YEAR, -1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
Date lastFriday = cal.getTime();
cal.add(Calendar.WEEK_OF_YEAR, -1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
Date lastToLastFriday = cal.getTime();

This line should help: 此行应有帮助:

calendar.add(Calendar.DATE, Calendar.FRIDAY - 7 - c.get(Calendar.DAY_OF_WEEK));

So this code is solving your problem: 因此,这段代码正在解决您的问题:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = GregorianCalendar.getInstance();
c.add(Calendar.DATE, Calendar.FRIDAY - 7 - c.get(Calendar.DAY_OF_WEEK));
System.out.println(sdf.formate(c.getTime()));
c.add(Calendar.DATE, Calendar.FRIDAY - 14 - c.get(Calendar.DAY_OF_WEEK));
System.out.println(sdf.formate(c.getTime()));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM