【问题标题】:Why does Calendar.JUNE set the month to July?为什么 Calendar.JUNE 将月份设置为 7 月?
【发布时间】:2014-05-10 10:26:15
【问题描述】:

我想你们中的一些人读了标题,然后说“哦,关于 java 的基于 0 的月份系统的另一个问题......”。好吧,这次不是。

切换到夏令时后,我的 java 日历对象的行为异常。将月份设置为 6 月,实际上将其设置为 7 月。我不知道为什么,但有人建议我在日历的构造函数参数中设置 Locale - 对象。那没有用。以下代码在我的控制台中返回01-07-14

有什么想法吗?

public class test {

    public static void main(String[] args){
        Locale locale = new Locale("da-DK");
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yy");

        Calendar date = new GregorianCalendar(locale);
        date.set(Calendar.MONTH, Calendar.JUNE);
        System.out.println(sdf.format(date.getTime()));
    }
}

更新:

这也返回01-07-14

public class test {

    public static void main(String[] args){
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yy");
        TimeZone timeZone = TimeZone.getTimeZone("Europe/Copenhagen");

        Calendar date = new GregorianCalendar(timeZone);
        date.set(Calendar.MONTH, Calendar.JUNE);
        System.out.println(sdf.format(date.getTime()));
    }
}

【问题讨论】:

  • 要正确处理夏令时,您需要告诉代码使用哪个时区。
  • “切换到夏令时”是指有史以来第一次,还是每年这个时候经常发生?
  • 这是每年都会发生的事,但这是我第一次遇到受它影响的系统。它是在不到半年前制作的,因此是此后的第一次。
  • @nablex 感谢您的建议。不幸的是,它没有用。

标签: java date dst gregorian-calendar


【解决方案1】:

今天是 3 月 31 日。当您设置日历月份时,当前日期仍然设置,但 6 月 31 日不存在,因此Calendar 会滚动到 7 月 1 日。

【讨论】:

  • 是的!当然!我早该知道。在我们转向夏令时之后发生这种情况多么方便,让我更加困惑。非常感谢!在对月份进行任何操作之前,我会确保将日期设置为 1 :)
  • 打我一拳,date.set(Calendar.DAY_OF_MONTH, 1); 修复它;)
  • ...这正是我现在所做的;)。多谢你们。真的谢谢。在这个问题上,您可能为我节省了几个令人沮丧的时间。
【解决方案2】:

【讨论】:

  • 它什么也没做。我现在将更新并简化我的代码以获取更多信息。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2014-03-30
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多