java不太熟悉但.需要java版的.一开始写的是javascript.此处只记录个思路
1 import java.time.LocalDate; 2 import java.time.temporal.ChronoUnit; 3 import java.time.temporal.WeekFields; 4 5 public class tmain { 6 public static void main(String[] args) { 7 8 getTest(); 9 } 10 static WeekFields weekFields = WeekFields.ISO; 11 12 private static void getTest() { 13 14 class WeekOfYearModel { 15 16 public int baseYear; 17 public int weekNum; 18 19 public WeekOfYearModel(int byear, int wkn) { 20 this.baseYear = byear; 21 this.weekNum = wkn; 22 } 23 24 public long subtract(WeekOfYearModel wk) { 25 long re ; 26 if (this.baseYear == wk.baseYear) { 27 re = this.weekNum - wk.weekNum; 28 } else { 29 long max ,min; 30 LocalDate sDate, eDate; 31 int xs = 1; 32 if (this.baseYear > wk.baseYear) { 33 sDate = getFirstDayOfFirstWeekByYear(wk.baseYear); 34 eDate = getFirstDayOfFirstWeekByYear(wk.baseYear + 1).plusDays(-1); 35 max = this.weekNum; 36 min=wk.weekNum; 37 } else { 38 sDate = getFirstDayOfFirstWeekByYear(this.baseYear); 39 eDate = getFirstDayOfFirstWeekByYear(this.baseYear + 1).plusDays(-1); 40 max = wk.weekNum; 41 min=this.weekNum; 42 xs = -1; 43 } 44 // max +=Math.ceilDiv(ChronoUnit.DAYS.between(sDate, eDate), 7) ; 45 max +=(ChronoUnit.DAYS.between(sDate, eDate)+7-1)/7 ; 46 re = (max - min) * xs; 47 } 48 return re; 49 } 50 51 } 52 53 WeekOfYearModel sdate=new WeekOfYearModel(2025,2); 54 WeekOfYearModel edate = new WeekOfYearModel(2024, 52); 55 //计算两周相差周数 56 long d= sdate.subtract(edate); 57 System.out.print(d); 58 } 59 public static LocalDate getFirstDayOfFirstWeekByYear(int year) { 60 int cYear = year; 61 LocalDate theWeekFirstDayOfCurrentYear; 62 LocalDate firstDayOfYear = LocalDate.of(cYear, 1, 1) ; 63 int weekDayOffirstDay = firstDayOfYear.get(weekFields.dayOfWeek()); 64 if (weekDayOffirstDay > 4) { 65 //1号是去年最后一周下周一是今年第一周的第一天 66 theWeekFirstDayOfCurrentYear = firstDayOfYear.plusDays((7 - weekDayOffirstDay) + 1); 67 } else if (weekDayOffirstDay > 1) { 68 theWeekFirstDayOfCurrentYear =firstDayOfYear.plusDays((weekDayOffirstDay-1)*-1); 69 } else { 70 theWeekFirstDayOfCurrentYear = firstDayOfYear; 71 } 72 return theWeekFirstDayOfCurrentYear; 73 } 74 public static int getWeekOfYear(LocalDate data) { 75 return data.get(weekFields.weekOfWeekBasedYear()); 76 } 77 }