【问题标题】:About GregorianCalendar : the same input but different output in java关于 GregorianCalendar:java 中输入相同但输出不同
【发布时间】:2011-06-08 04:33:37
【问题描述】:

我想用毫秒在我的程序中设置一个新的日期,但它不起作用。有没有人可以告诉我为什么它不起作用?

日历 r_1 = new GregorianCalendar(2011,0,1);

r_1.add(Calendar.DAY_OF_MONTH,2);

System.out.println(r_1.getTime());

长日期_1 = r_1.getTimeInMillis() + 2*24*60*60*1000;

r_1.setTimeInMillis(startTime1);

System.out.println(r_1.getTime());

它的工作原理都非常正确,但是如果我将日期从 2 更改为 25,那么它就不起作用了。

---------输出正确,是 2011/01/26 ----------

日历 r_1 = new GregorianCalendar(2011,0,1);

r_1.add(Calendar.DAY_OF_MONTH,25);

System.out.println(r_1.getTime());

-----------现在的输出不正确,是2010/12/07------

long date_1 = r_1.getTimeInMillis() + 25*24*60*60*1000;//我把2改成25了

r_1.setTimeInMillis(startTime1);

System.out.println(r_1.getTime());

谢谢

【问题讨论】:

    标签: java gregorian-calendar


    【解决方案1】:

    表达式25*24*60*60*1000是一个整数,你已经溢出了整数的大小,创建了一个负数。

    您的表达式是 2,160,000,000 毫秒。 int 可以容纳的最大值是 2,147,483,647。

    要解决此问题,您必须强制表达式为长,如下所示

    25L*24*60*60*1000
    

    【讨论】:

    • 谢谢,这是真的。有溢出!
    【解决方案2】:

    25*24*60*60*1000 太大,无法放入 int。 试试25L*24*60*60*1000,它是一个长常量。

    【讨论】:

      【解决方案3】:

      试试这样的:

      final long k = 25*24*60*60*1000L;
      long date_1 = r_1.getTimeInMillis() + k;
      

      【讨论】:

        猜你喜欢
        • 2012-09-08
        • 1970-01-01
        • 2021-09-09
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 2019-04-21
        • 1970-01-01
        • 2019-10-16
        相关资源
        最近更新 更多