How to get the last Sunday before current date?

后端 未结 7 1198
花落未央
花落未央 2021-02-12 15:07

I have the following code for getting the last Sunday before the current date:

Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.WEEK_OF_YEAR, cale         


        
相关标签:
7条回答
  • 2021-02-12 15:41

    Here is a snippet to calculate any last day of the week with Joda:

    import org.joda.time.DateTime
    import org.joda.time.DateTimeConstants
    
    DateTime now = DateTime();
    int offset = ((now.dayOfWeek - DateTimeConstants.THURSDAY) + 7) % 7;
    DateTime lastThursday = now.minusDays(offset);
    

    Just replace DateTimeConstants.THURSDAY with your day of choice.

    0 讨论(0)
  • 2021-02-12 15:48
    final Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(cal.getTimeInMillis() //
         // Saturday is the 7th day of week, so use modulo to get it : remove day between todoay
         - (( cal.get(Calendar.DAY_OF_WEEK) % 7) * 86400000)); // 86400000=24*60*60*1000
    
    System.out.println(cal.getTime());
    . . .
    
    0 讨论(0)
  • 2021-02-12 15:55

    This will work. We first get the day count, and then subtract that with the current day and add 1 ( for sunday)

    Calendar cal=Calendar.getInstance();
    cal.add( Calendar.DAY_OF_WEEK, -(cal.get(Calendar.DAY_OF_WEEK)-1)); 
    System.out.println(cal.get(Calendar.DATE));
    

    Edit : As pointed out by Basil Bourque in the comment, see the answer by Grzegorz Gajos for Java 8 and later.

    0 讨论(0)
  • 2021-02-12 15:56

    Here's how to do it with a Kotlin extension and the Joda Time library.
    Answer is based on linqu's answer but this also fixes a bug in that answer. The bug was that it did not work if the current date was the same day you're trying to get.

    /**
     * E.g., DateTimeConstants.SUNDAY
     */
    fun DateTime.previousDayOfWeek(day: Int): DateTime {
        var date = this
        if(date.dayOfWeek == day) date = date.minusDays(1)
    
        val offset = (date.dayOfWeek - day + 7) % 7
        return date.minusDays(offset)
    }
    
    fun DateTime.previousSunday(): DateTime {
        return previousDayOfWeek(DateTimeConstants.SUNDAY)
    }
    
    0 讨论(0)
  • 2021-02-12 15:58

    java.time.temporal.TemporalAdjuster

    This can be easily achieved by a TemporalAdjuster implementation found in TemporalAdjusters along with the DayOfWeek enum. Specifically, previous​(DayOfWeek dayOfWeek).

     LocalDate
     .now()
     .with(
         TemporalAdjusters.previous( DayOfWeek.SUNDAY )
     ) ;
    

    If today is Sunday and you would like the result to be today rather than a week ago, call previousOrSame​(DayOfWeek dayOfWeek).

     LocalDate
     .now()
     .with(
         TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY )
     ) ;
    

    These classes are built into Java 8 and later, and built into Android 26 and later. For Java 6 & 7, most of the functionality is back-ported in ThreeTen-Backport. For earlier Android, see ThreeTenABP.

    0 讨论(0)
  • 2021-02-12 16:00

    You could iterate back in steps of one day until you arrive on a Sunday:

    Calendar cal = Calendar.getInstance();
    while (cal.get( Calendar.DAY_OF_WEEK ) != Calendar.SUNDAY)
        cal.add( Calendar.DAY_OF_WEEK, -1 );
    

    or, in only one step, substract the difference in days between sunday and now:

    Calendar cal = Calendar.getInstance();
    int dayOfTheWeek = cal.get( Calendar.DAY_OF_WEEK );
    cal.add( Calendar.DAY_OF_WEEK, Calendar.SUNDAY - dayOfTheWeek );
    
    0 讨论(0)
提交回复
热议问题