我正在尝试编写一个 Java 方法来移动日历,使用以毫秒为单位的时间偏移量。 但是当我尝试轮类一个月(30 天)时,它不起作用:
Calendar c = new GregorianCalendar(2012, 5, 23, 13, 23, 10);
long original = c.getTimeInMillis();
System.out.println("Original Date "+c.getTime());
long oneMonth = 30*24*60*60*1000; //one month in milliseconds
Calendar c_1Month = new GregorianCalendar();
c_1Month.setTimeInMillis(original+oneMonth);
System.out.println("After 1-month "+c_1Month.getTime());
输出为
Original Date Sat Jun 23 13:23:10 PDT 2012
After 1-month Sun Jun 03 20:20:22 PDT 2012
您可以看到它没有正确地将其转移到 7 月 23 日。 我知道日历中有一种特定的方法添加(字段,金额),我可以使用它来更改月份,但我想在我的客户端中使用一种方法来转移时间,并提供以毫秒为单位的转移量(转移量的变化基于在我的测试中,我不想有几种方法)。
最佳答案
您认为变量 oneMonth 是一个 long,但您为其分配了一个整数值。但 30*24*60*60*1000
的结果不适合整数,因此会溢出为负值。
如果您将代码更改为 long oneMonth = 30*24*60*60*1000L;
它将起作用。
但是尽管你的代码中有这个“bug”,comment azurefrog 的说法是正确的,这不是添加 1 个月的推荐方法,只有在您想添加 30 天(这是不同的情况)时才有效。
尝试使用这样的东西:
c_1Month.add( Calendar.DAY_OF_MONTH, 30);
或
c_1Month.add( Calendar.MONTH, 1);
Calendar 类能够感知并能够很好地处理所有极端情况。我建议你依靠这个。它减少了可能的错误并使代码更易于阅读和理解。
对于 Java 8,要使用的代码是:
LocalDateTime.now().plusMonths(1);
或
LocalDateTime.now().plusDays(30);
关于java - 如何在 Java 中移动日历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316799/