栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

根据Java 8中的LocalDate.now()获取星期几的日期

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据Java 8中的LocalDate.now()获取星期几的日期

请注意,该表达式

System.out.println(now.with(DayOfWeek.MONDAY))
使用ISO-8601,因此它与语言环境无关,因此它总是向后跳到上一个星期一(或保留在星期一,以防日期已经指向星期一)。

因此,在美国或其他一些国家/地区(星期从星期日开始)-可能无法按您预期的那样工作-
如果日期指向星期日,

now.with(DayOfWeek.MONDAY)
则不会跳到 星期一。

如果您需要解决这些问题,最好使用本地化字段WeekFields.dayOfWeek():

LocalDate now = LocalDate.now();TemporalField fieldISO = WeekFields.of(Locale.FRANCE).dayOfWeek();System.out.println(now.with(fieldISO, 1)); // 2015-02-09 (Monday)TemporalField fieldUS = WeekFields.of(Locale.US).dayOfWeek();System.out.println(now.with(fieldUS, 1)); // 2015-02-08 (Sunday)

由于下面的评论而产生的另一个示例:

LocalDate ld = LocalDate.of(2017, 8, 18); // Friday as original dateSystem.out.println(    ld.with(DayOfWeek.SUNDAY)); // 2017-08-20 (2 days later according to ISO)// Now let's again set the date to Sunday, but this time in a localized way...// the method dayOfWeek() uses localized numbering (Sunday = 1 in US and = 7 in France)System.out.println(ld.with(WeekFields.of(Locale.US).dayOfWeek(), 1L)); // 2017-08-13System.out.println(ld.with(WeekFields.of(Locale.FRANCE).dayOfWeek(), 7L)); // 2017-08-20

以美国为例,这很清楚地表明,居住在美国的人会期望去到下一个而不是下一个星期日,因为星期日被认为是美国一周中的第一天。基于ISO的简单表达式

with(DayOfWeek.SUNDAY)
忽略了此本地化问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号