日期踩坑(分享)

日期踩坑(分享)

前言

关于年周的划分比较的懵逼(网上相关的资料也比较少):

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,另一个则是返回去年的末尾周,结果如下:

posted @   xiaoxiaoguai98  阅读(303)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示