日期踩坑(分享)
日期踩坑(分享)
前言
关于年周的划分比较的懵逼(网上相关的资料也比较少):
LocalDate localDate = now.with(WeekFields.ISO.weekBasedYear(),
Long.parseLong(yearAndWeek[0]))
.with(WeekFields.ISO.weekOfYear(), Long.parseLong(yearAndWeek[1]));
localDate.with(WeekFields.ISO.dayOfWeek(), 1);
踩坑过程
代码关键字段涉及的意义
-
yearAndWeek[]
存储的是年、周
-
weekBasedYear()
返回weekBasedYear,含义:表示基于周的年份字段。
此处替换副本的年
-
weekOfYear()
返回weekOfYear,含义:表示一年中的某周
此处替换副本的周数
-
dayOfWeek()
返回dayOfWeek,含义:一周中的某天(与一周的开始有关)
此处替换副本中的某天
结论
这段代码是为了找出某年某周的礼拜一的具体日期
扩展
-
with方法
返回日期副本,该方法有很多的重载方法
-
ISO
一种标准:一年的第一周以周一开始,且至少四天
-
WeekFields
作用是用于自定义周的属性
举个栗子(来自Oracle官网):
日期 星期几 周第一天:星期一 最少天数:4 周第一天:星期一 最少天数:5 2008-12-31 周三 2009 年第 1 周 2008 年第 53 周 2009-01-01 周四 2009 年第 1 周 2008 年第 53 周 2009-01-04 星期日 2009 年第 1 周 2008 年第 53 周 2009-01-05 周一 2009 年第 2 周 2009 年第 1 周 Q:dateCopy1的值如何确定?(没找到资料,经过多次测试,此处做一个推测)
A:根据原日期的星期去确定副本的日期(周三),如果将开始天设为周二,第一周最小天数为2,输出结果如下:
Q:weekOfYear()和weekOfWeekBasedYear()的区别?
A:当weekOfYear()第一周少于最小天数时会返回0,另一个则是返回去年的末尾周,结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现