能够及时跟踪虚构日期的最佳课程? (Java)的

时间:2015-10-06 21:14:21

标签: java date

我正在用Java制作一个视频游戏,但我遇到了一个需要准确管理日期的问题。游戏将在2010年的某个地方开始,并且需要在格里高利历之后的日复一日继续。我不会使用任何小时或分钟,所以对我来说唯一重要的事情是,在告诉我的程序有一天走向未来之后,它需要正确地知道2月只有28天而12月有31天等等。

我知道有一个Java Date类,但是我没有在API中看到任何类型的“go X dates”方法(原因不在于我)。有一个设定的日期功能,但这对我不起作用,因为我的程序不能确定哪个月有更少/更多天等等。

感谢您的帮助!

4 个答案:

答案 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);