【问题标题】:Seting calendar.day_of_month is setting calendar.year设置 calendar.day_of_month 就是设置 calendar.year
【发布时间】:2019-11-17 23:24:18
【问题描述】:

我的日历最初设置为 2019 年 11 月 1 日,我想使用以下方法将其设置为月份的第一个日期和最后一个日期:

cal.set(int field,int value) 

对于我使用的字段:

Calendar.DATE or Calendar.DAY_OF_MONTH

但是 sysout 上的系统显示它正在设置 Calendar.YEAR

System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));

cal.set(cal.get(Calendar.DAY_OF_MONTH),1);
        
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
        
cal.set(cal.get(Calendar.DAY_OF_MONTH),cal.getActualMaximum(Calendar.DAY_OF_MONTH));

System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));

系统输出:

2019-11-01

0001-11-01

0030-11-01

【问题讨论】:

  • Java 8 及其 java.time API 于 2014 年 3 月问世。我们是 2019 年 11 月,5 年多之后。停止使用旧的、过时的、笨重的 Calendar 和 Date 类。使用 java.time API。
  • cal.set(Calendar.DAY_OF_MONTH, 1);cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); - 不要打电话给 cal.set(cal.get(Calendar.DAY_OF_MONTH) - 这是不正确的。
  • 是的,Calendar 类有一个令人困惑的接口。难怪人们会犯这样的错误。不幸的是,你远不是第一个,也不是最后一个。好的解决方案(它非常好)是停止使用Calendar 类并改用java.time, the modern Java date and time API,
  • 谢谢大家,我将退出这个日历课程

标签: java spring date calendar simpledateformat


【解决方案1】:

您可以使用 java-8 现代日期时间 API LocalDate,停止使用旧版 Calendarutil.Date

LocalDate date = LocalDate.parse("2019-11-01");

System.out.println(date.with(TemporalAdjusters.firstDayOfMonth()));  //2019-11-01
System.out.println(date.with(TemporalAdjusters.lastDayOfMonth()));   //2019-11-30

【讨论】:

    【解决方案2】:

    你应该使用

    日历.DAY_OF_MONTH

    不是

    cal.get(Calendar.DAY_OF_MONTH)

    因为 Calendar 类有静态字段来表示每个字段的 ID,例如 DAY_OF_MONTH = 5 当您使用 cal.set(cal.get(Calendar.DAY_OF_MONTH),1) 时,您告诉日历获取 DAY_OF_MONTH 的日历值,它等于 = 1(您说 cal 值 = 2-19-11-01 ),并且 1 是年份,因此您将年份设置为 1 而不是日期

    像这样使用它: cal.set(Calendar.DAY_OF_MONTH,1);

    【讨论】:

    • 这个可怕的类在几年前被 JSR 310 中定义的 java.time 类所取代。
    • 是的,但我正在解释日历类@BasilBourque 中的正确之处
    猜你喜欢
    • 2012-08-26
    • 2010-12-18
    • 2015-10-23
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多