【问题标题】:Calendar`s getActualMinimum returns wrong value日历的 getActualMinimum 返回错误值
【发布时间】:2023-01-19 21:51:30
【问题描述】:

我需要将某个日期与当前日期/时间进行比较,以确保它在当月的第一天/小时/分钟/秒之前。为了实现此功能,使用其 getActualMinimum 方法配置 Calendar 实例,但是,今天(星期四,19/01/2023 - 10:40:18 BRT 2023),它呈现了我从未有过的行为面对过。考虑以下代码:

    Calendar cal = Calendar.getInstance();
    System.out.println("After instantiation:                  " + cal.getTime());
    
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
    System.out.println("After configuring the Day of Month:   " + cal.getTime());
    
    cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
    System.out.println("After configuring the Hour of day:    " + cal.getTime());
    
    cal.set(Calendar.MINUTE, cal.getActualMinimum(Calendar.MINUTE));
    System.out.println("After configuring the Minutes:        " + cal.getTime());
    
    cal.set(Calendar.SECOND, cal.getActualMinimum(Calendar.SECOND));
    System.out.println("After configuring the Seconds:        " + cal.getTime());
    
    cal.set(Calendar.MILLISECOND, cal.getActualMinimum(Calendar.MILLISECOND));
    System.out.println("After configuring the Millis:         " + cal.getTime());

上面的代码,在创建这篇文章的那一刻,将打印到控制台:

After instantiation:                  Thu Jan 19 10:40:18 BRT 2023
After configuring the Day of Month:   Sun Jan 01 10:40:18 BRT 2023
After configuring the Hour of day:    Sat Dec 31 23:40:18 BRT 2022
After configuring the Minutes:        Sat Dec 31 23:00:18 BRT 2022
After configuring the Seconds:        Sat Dec 31 23:00:00 BRT 2022
After configuring the Millis:         Sat Dec 31 23:00:00 BRT 2022

有人可以解释为什么在配置一天中的小时后,该值设置为23并不是00?

【问题讨论】:

  • 这对我来说很好用。但是你绝对应该为此使用新的java.time类

标签: java calendar


【解决方案1】:

可能是你电脑的默认TimeZone导致的,在你声明Calnedar对象后尝试添加这个

cal.setTimeZone(TimeZone.getTimeZone("UTC"));

【讨论】:

  • 甚至可以实例化带有时区Calendar.getInstance(TimeZone.getTimeZone("UTC"));的日历
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2018-11-26
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
相关资源
最近更新 更多