我正在用Java制作一个视频游戏,但我遇到了一个需要准确管理日期的问题。游戏将在2010年的某个地方开始,并且需要在格里高利历之后的日复一日继续。我不会使用任何小时或分钟,所以对我来说唯一重要的事情是,在告诉我的程序有一天走向未来之后,它需要正确地知道2月只有28天而12月有31天等等。
我知道有一个Java Date类,但是我没有在API中看到任何类型的“go X dates”方法(原因不在于我)。有一个设定的日期功能,但这对我不起作用,因为我的程序不能确定哪个月有更少/更多天等等。
感谢您的帮助!
答案 0 :(得分:4)
如果你还在使用Java 7或更早版本(在这种情况下你也希望希望转移到Java 8),那么你应该使用Joda Time,或{如果你正在使用Java 8,那么{1}}包。
在这两种情况下,您都需要java.time
类,该类用于表示没有时间的日期,并且没有任何关联的时区。
与使用过时的可怕的 LocalDate
(或java.util.Calendar
)相比,它使用的更多更干净的API。没有奇怪的常数可以担心,而不是简单的方法调用,没有基于0的月份等。
你可以使用:
java.util.Date
提前约会。太好了!
答案 1 :(得分:3)
如果你正在使用java 7-,那么java.util.Calendar类提供了一种add方法,您可以利用该方法将日期/月份/年份等增加到任何金额。我喜欢。这是一个为给定日历实例添加5天的示例:
mycal.add(Calendar.DAY_OF_MONTH, 5);
如果您正在使用java 8+,或者能够在您的环境中包含Joda时间,请参阅Jon Skeet的回答。
答案 2 :(得分:2)
无论Java版本如何,我都会使用Calendar。当JDK提供解决方案时,我不会依赖第三方jar作为日期。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarArithmatic
{
public static void main(String [] args)
{
Calendar calendar = new GregorianCalendar(2010,Calendar.FEBRUARY,28);
calendar.add(Calendar.DATE, 1); // add 1 day
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MMMM-dd");
String date=sdf.format(calendar.getTime());
System.out.println(date);
// prints:
// 2010-March-01
}
}
答案 3 :(得分:1)
如果您需要添加"日期"或者您的约会日期,您可以使用日历(http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html):
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);