9

我有一个需要在 09 年 1 月 1 日开始的程序,当我开始新的一天时,我的程序将在第二天显示。这是我到目前为止所拥有的:

GregorianCalendar startDate = new GregorianCalendar(2009, Calendar.JANUARY, 1);
SimpleDateFormat sdf = new SimpleDateFormat("d/M/yyyy"); 
public void setStart()
{
    startDate.setLenient(false);
    System.out.println(sdf.format(startDate.getTime()));
}

public void today()
{
    newDay = startDate.add(5, 1);
    System.out.println(newDay);
//I want to add a day to the start day and when I start another new day, I want to add another day to that.
}

我在 'newDay = startDate.add(5, 1);' 中发现错误为 void 但预期为 int 我该怎么办?

4

2 回答 2

18

Calendar对象具有一种add方法,该方法允许添加或减去指定字段的值。

例如,

Calendar c = new GregorianCalendar(2009, Calendar.JANUARY, 1);
c.add(Calendar.DAY_OF_MONTH, 1);

用于指定字段的常量可以在Calendar类的“字段摘要”中找到。

仅供将来参考,Java API 规范包含许多有关如何使用作为 Java API 一部分的类的有用信息。


更新:

我在 'newDay = startDate.add(5, 1);' 中发现错误为 void 但预期为 int 我该怎么办?

add方法不返回任何内容,因此,尝试分配调用结果Calendar.add是无效的。

编译器错误表明有人试图将 a 分配给void类型为 的变量int。这是无效的,因为不能将“无”分配给int变量。

只是一个猜测,但也许这可能是试图实现的目标:

// Get a calendar which is set to a specified date.
Calendar calendar = new GregorianCalendar(2009, Calendar.JANUARY, 1);

// Get the current date representation of the calendar.
Date startDate = calendar.getTime();

// Increment the calendar's date by 1 day.
calendar.add(Calendar.DAY_OF_MONTH, 1);

// Get the current date representation of the calendar.
Date endDate = calendar.getTime();

System.out.println(startDate);
System.out.println(endDate);

输出:

Thu Jan 01 00:00:00 PST 2009
Fri Jan 02 00:00:00 PST 2009

需要考虑的是Calendar实际情况。

ACalendar不是日期的表示。它是日历的表示,以及它当前指向的位置。为了获得日历当前指向的位置的表示,应该DateCalendar使用该getTime方法获得 a 。

于 2009-09-13T05:15:17.320 回答
1

如果您可以明智地调整需求,请将您所有的日期/时间需求转移到 JODA,这是一个更好的库,还有一个额外的好处是几乎所有内容都是不可变的,这意味着多线程是免费的。

于 2009-09-13T08:37:55.743 回答