我想知道本周第一天的日期。所以我用这样的方式实现了它:
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。这些设备具有相同的地区和相同的时区。
发布于 2018-05-29 12:08:40
如果我的理解是正确的,你想把星期日当作一周的第一天(就像在美国一样)。
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。今日(五月二十九日星期二)刊载
2018-05-27
如果你希望星期一成为一周的第一天(如波兰和国际标准所述),只需使用WeekFields.ISO而不是WeekFields.SUNDAY_START。如果希望它依赖于区域设置,请使用例如WeekFields.of(Locale.forLanguageTag("pl-PL"))。
另一个可能更明确的选择是:
LocalDate firstDayOfThisWeek = today
.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));在这两种情况下,我都使用了java.time (现代Java和time )。我认为这是一个很好的例子,它提供了更清晰的代码,与以前的日期和时间类(如Calendar )相比,这通常是这样的。
你的代码出了什么问题?
正如我所理解的文档,您的代码应该给出本星期的星期日。Calendar周日使用1。您可能已经使用calendar.set(DAY_OF_WEEK, SUNDAY)来获得完全相同的信息。当我今天运行它,我得到5月27日当使用星期日作为一周的第一天和6月3日当使用星期一作为第一天(这意味着星期日是一周的最后一天)。不过,文档并不十分清楚,Calendar类可能会让人感到困惑。在任何情况下,这可能也是在不同设备上尝试时发生的情况:它们对周有不同的定义。如果您可以单独配置周定义,即使它们具有相同的区域设置,也可能出现这种情况。
问:我可以在安卓系统上使用java.time吗?
是的,java.time在较旧的和更新的安卓设备上运行得很好。它只需要至少需要Java 6。
org.threeten.bp导入日期和时间类。链接
java.time。java.time的地方。java.time到Java6和7的后端端口(ThreeTen for JSR-310)。发布于 2018-05-29 05:35:13
每周的第一天对于不同的国家是不同的。如果希望对所有用户都是相同的,可以将一个Locale传递给Calendar。
Calendar currentCalendar = Calendar.getInstance(new Locale("en","UK"));同样从这答案,您可以使用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 这里的更多信息。
https://stackoverflow.com/questions/50571850
复制相似问题