fork download
  1. import java.time.DayOfWeek;
  2. import java.time.LocalDate;
  3. import java.time.Month;
  4. import java.time.format.TextStyle;
  5. import java.time.temporal.TemporalAdjusters;
  6. import java.time.temporal.WeekFields;
  7. import java.util.Locale;
  8.  
  9. public class Main {
  10. public static void main(String[] args) {
  11. // Test
  12. System.out.println(getWeeks(2021, 7, new Locale("pt", "BR")));
  13.  
  14. System.out.println("---------------------------------------------------------");
  15.  
  16. System.out.println(getWeeks(2021, 2, new Locale("pt", "BR")));
  17.  
  18. System.out.println("---------------------------------------------------------");
  19.  
  20. System.out.println(getWeeks(2021, 7, new Locale("en", "GB")));
  21.  
  22. System.out.println("---------------------------------------------------------");
  23.  
  24. System.out.println(getWeeks(2021, 2, new Locale("en", "GB")));
  25. }
  26.  
  27. static String getWeeks(int year, int month, Locale locale) {
  28. DayOfWeek firstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();
  29. LocalDate firstDateOfMonth = LocalDate.of(year, month, 1);
  30. String monthName = Month.of(month).getDisplayName(TextStyle.FULL, Locale.ENGLISH);
  31. int lastDayOfMonth = firstDateOfMonth.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
  32.  
  33. int firstDay = 1;
  34. int lastDayOfFirstWeek = LocalDate.of(year, month, 1).with(TemporalAdjusters.nextOrSame(firstDayOfWeek))
  35. .getDayOfMonth();
  36. int lastDay = lastDayOfFirstWeek == 1 ? 7 : lastDayOfFirstWeek - 1;
  37.  
  38. int i;
  39. StringBuilder sb = new StringBuilder();
  40.  
  41. for (i = 1; i <= lastDayOfMonth / 7; i++) {
  42. sb.append(String.format("Year %d - Month %d (%s) - Week %d - First day: %d - Last Day: %d%n", year, month,
  43. monthName, i, firstDay, lastDay));
  44. firstDay = lastDay + 1;
  45. lastDay += 7;
  46. }
  47.  
  48. if (lastDayOfFirstWeek != 1 && lastDayOfMonth >= 28)
  49. sb.append(String.format("Year %d - Month %d (%s) - Week %d - First day: %d - Last Day: %d%n", year, month,
  50. monthName, i, firstDay, lastDayOfMonth));
  51.  
  52. return sb.toString();
  53. }
  54. }
Success #stdin #stdout 0.22s 53976KB
stdin
Standard input is empty
stdout
Year 2021 - Month 7 (July) - Week 1 - First day: 1 - Last Day: 3
Year 2021 - Month 7 (July) - Week 2 - First day: 4 - Last Day: 10
Year 2021 - Month 7 (July) - Week 3 - First day: 11 - Last Day: 17
Year 2021 - Month 7 (July) - Week 4 - First day: 18 - Last Day: 24
Year 2021 - Month 7 (July) - Week 5 - First day: 25 - Last Day: 31

---------------------------------------------------------
Year 2021 - Month 2 (February) - Week 1 - First day: 1 - Last Day: 6
Year 2021 - Month 2 (February) - Week 2 - First day: 7 - Last Day: 13
Year 2021 - Month 2 (February) - Week 3 - First day: 14 - Last Day: 20
Year 2021 - Month 2 (February) - Week 4 - First day: 21 - Last Day: 27
Year 2021 - Month 2 (February) - Week 5 - First day: 28 - Last Day: 28

---------------------------------------------------------
Year 2021 - Month 7 (July) - Week 1 - First day: 1 - Last Day: 4
Year 2021 - Month 7 (July) - Week 2 - First day: 5 - Last Day: 11
Year 2021 - Month 7 (July) - Week 3 - First day: 12 - Last Day: 18
Year 2021 - Month 7 (July) - Week 4 - First day: 19 - Last Day: 25
Year 2021 - Month 7 (July) - Week 5 - First day: 26 - Last Day: 31

---------------------------------------------------------
Year 2021 - Month 2 (February) - Week 1 - First day: 1 - Last Day: 7
Year 2021 - Month 2 (February) - Week 2 - First day: 8 - Last Day: 14
Year 2021 - Month 2 (February) - Week 3 - First day: 15 - Last Day: 21
Year 2021 - Month 2 (February) - Week 4 - First day: 22 - Last Day: 28