Using standard library
最初的解决方案(如下所示)使用的是外部库.这一解决方案的功劳是
user85421分.我们的 idea 是将给定的字符串解析为LocalDate
,方法是将星期几设为缺省日期-1.
public class Main {
public static void main(String[] args) {
String strWeekA = "2012-W48";
String strWeekB = "2013-W03";
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendPattern("YYYY-'W'ww")
.parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
.toFormatter();
LocalDate date1 = LocalDate.parse(strWeekA, dtf);
LocalDate date2 = LocalDate.parse(strWeekB, dtf);
System.out.println(WEEKS.between(date1, date2));
}
}
Output:
7
100
Using an external library (original solution)
您可以使用ThreeTen-Extra库来满足您的需求.
您可以使用YearWeek
及其isBefore
和isAfter
方法.
您可以使用java.time.temporal.ChronoUnit#between
来计算两个YearWeek
对象之间的时间量.或者,您可以使用YearWeek#until
来获得相同的结果.
下面给出了它的Maven依赖项:
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threeten-extra</artifactId>
<version>1.7.2</version>
</dependency>
Demo:
import org.threeten.extra.YearWeek;
import static java.time.temporal.ChronoUnit.WEEKS;
public class Main {
public static void main(String[] args) {
String strWeekA = "2012-W48";
String strWeekB = "2013-W03";
YearWeek weekA = YearWeek.parse(strWeekA);
YearWeek weekB = YearWeek.parse(strWeekB);
System.out.println(weekA.isBefore(weekB));
System.out.println(WEEKS.between(weekA, weekB));
System.out.println(weekA.until(weekB, WEEKS));
}
}
Output:
true
7
7