我本周在日期库方面遇到问题。当你用谷歌搜索时,已经是第 11 周,但我的函数返回 12。就位置而言,我在南非,但正在测试该应用程序的德国人报告了同样的问题。我编写了下面的代码,用一小段代码对此进行了测试,我发现当我使用 new Date() 库获取日历时,它返回 12,但是当我使用 Localdate.now() 时,它返回 11。
我更新了 Dockerfile jdk 最初是jdk8,现在是openjdk11。这可能是我得到不同结果的原因吗?new Date()Java 11 不再支持?
下面是代码片段。如果有人能在这方面帮助我,我会很高兴。
package com.company;
import java.time.LocalDate;
import java.time.temporal.ChronoField;
import java.util.Calendar;
import java.util.Date;
public class CalenderLibrary {
private static Calendar cal = Calendar.getInstance();
public static void main(String[] args) {
Date date = new Date();
String calendarWeekFromEvent = getCalendarWeekFromEventWithDate(date);
System.out.println("Date: {} " + calendarWeekFromEvent);
LocalDate localDate = LocalDate.now();
String localDate1 = getCalendarWeekFromEventWithLocalDate(localDate);
System.out.println("LocalDate: {} " + localDate1);
}
private static String getCalendarWeekFromEventWithLocalDate(LocalDate date) {
return String.valueOf(date.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
}
private static String getCalendarWeekFromEventWithDate(Date date) {
cal.setTime(date);
return String.valueOf(cal.get(Calendar.WEEK_OF_YEAR));
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Date: {} 12
LocalDate: {} 11
Run Code Online (Sandbox Code Playgroud)
java.util.Date并java.util.Calendar没有被弃用,并且仍然像往常一样工作。然而,它们的工作方式很难使用,这就是为什么java.time建议使用类。
WEEK_OF_YEAR您所看到的是(取决于区域设置)和ALIGNED_WEEK_OF_YEAR(在所有区域设置中都相同)之间的差异。
设置或获取
WEEK_OF_MONTH或WEEK_OF_YEAR字段时,Calendar必须确定该月或该年的第一周作为参考点。一个月或一年的第一周定义为从该月或一年开始getFirstDayOfWeek()并至少包含getMinimalDaysInFirstWeek()该月或一年的天数的最早 7 天时间段。编号为 ..., -1, 0 的周在第一周之前;接下来是第 2、3、... 周。请注意,返回的标准化编号get()可能不同。例如,特定的日历子类可以将一年的第 1 周之前的一周指定为前一年的第 n 周。
ALIGNED_WEEK_OF_YEAR表示一年中周数的概念,其中周数与年初对齐。该字段通常与 一起使用ALIGNED_DAY_OF_WEEK_IN_YEAR。例如,在每周 7 天的日历系统中,一年中的第一个对齐周从年份 1 开始,第二个对齐周从年份 8 开始,依此类推。因此,一年中的某一天值 1 到 7 位于对齐的第 1 周中,而一年中的某一天值 8 到 14 位于对齐的第 2 周中,依此类推。
对于区域设置差异:
// returns DayOfWeek.MONDAY
WeekFields.of(Locale.forLanguageTag("de-DE")).getFirstDayOfWeek();
// returns DayOfWeek.SUNDAY
WeekFields.of(Locale.forLanguageTag("en-ZA")).getFirstDayOfWeek();
Run Code Online (Sandbox Code Playgroud)
要使用本地当前系统获取一年中未对齐的周java.time:
LocalDate.now().get(WeekFields.of(Locale.getDefault()).weekOfYear())
Run Code Online (Sandbox Code Playgroud)
如果您想要与区域设置无关,那么ISO.weekOfYear()您希望一周从星期一开始,然后SUNDAY_START.weekOfYear()从星期日开始。
| 归档时间: |
|
| 查看次数: |
5141 次 |
| 最近记录: |