我想知道本周第一天的日期。所以我用这种方式实现了它:
fun getFirstDayInCurrentWeek(): Date {
val calendar = Calendar.getInstance()
calendar.clear(MILLISECOND)
calendar.clear(SECOND)
calendar.clear(MINUTE)
calendar.set(HOUR_OF_DAY, 0)
calendar.set(DAY_OF_WEEK, 1)
return calendar.time
}
它适用于大多数设备,但有时会返回下周第一天的日期。我无法弄清楚原因。
课程来自java.util.*
。
编辑:今天(28.05.2018)只记录此功能的结果,您将看到27.05.2018或03.06.2018。设备具有相同的区域设置和相同的时区。
答案 0 :(得分:2)
如果我理解正确,你想把星期日视为一周的第一天(如在美国)。
WeekFields wf = WeekFields.SUNDAY_START;
LocalDate today = LocalDate.now(ZoneId.of("Europe/Warsaw"));
LocalDate firstDayOfThisWeek = today.with(wf.dayOfWeek(), 1);
System.out.println(firstDayOfThisWeek);
我正在编写Java代码并相信你可以转换为Kotlin。今天(5月29日星期二)正在运行此印刷
2018年5月27日
如果您希望星期一作为一周的第一天(如波兰和国际标准所述),请使用WeekFields.ISO
代替WeekFields.SUNDAY_START
。如果您希望它依赖于区域设置,请使用例如WeekFields.of(Locale.forLanguageTag("pl-PL"))
。
另一个可能更清晰的选择是:
LocalDate firstDayOfThisWeek = today
.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
在这两种情况下,我使用java.time
,即现代Java日期和时间API。我认为这是一个很好的例子,它提供了更清晰的代码,与旧的日期和时间类(如Calendar
相比)通常就是这种情况。
据我了解文档,您的代码应该给出本周的星期日。 Calendar
在星期日使用1。您可能已使用calendar.set(DAY_OF_WEEK, SUNDAY)
获得完全相同的内容。当我今天运行它时,我将使用星期日作为星期一和6月3日使用星期一作为第一天(这意味着星期日是一周的最后一天)。但是,文档不是很清楚,Calendar
类可能会令人困惑。在任何情况下,可能这也是你在不同设备上尝试时发生的事情:它们有不同的周定义。如果您可以单独配置周定义,即使它们具有相同的区域设置,也可以这样做。
是的,java.time
适用于较旧和较新的Android设备。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。答案 1 :(得分:1)
不同国家/地区的第一天不同。如果您希望所有用户都一样,则可以将Locale
传递给Calendar
。
Calendar currentCalendar = Calendar.getInstance(new Locale("en","UK"));
也来自this回答,您可以使用方法setFirstDayOfWeek()来设置一周的第一天。该方法只能影响WEEK_OF_MONTH或WEEK_OF_YEAR的返回值。对于DAY_OF_WEEK,它什么都不做。
您可以实现以下内容:
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
int rec = cal.get(Calendar.WEEK_OF_MONTH);
System.out.println(rec);
详细了解API HERE