2015-10-06 2 views
0

Я делаю видео-игру на Java, и у меня возникла проблема, когда мне нужна дата, чтобы ее можно было точно контролировать. Игра начнется где-то в 2010 году, и она должна продолжаться изо дня в день после григорианского календаря. Я не буду использовать часы или минуты, поэтому для меня важно только то, что после того, как я расскажу о своей программе в один прекрасный день в будущем, ей необходимо правильно знать, что в феврале всего 28 дней, а в декабре - 31 день и т. Д.Лучший способ отслеживать вымышленную дату вовремя? (Java)

Я знаю, что есть класс Java Date, но я НЕ видел никакого метода «go X date» в API (причина, по которой меня нет). Существует установленная функция даты, но это не будет работать для меня, так как моя программа не будет уверена, какие месяцы имеют меньше/больше дней и т. Д.

Спасибо за помощь!

ответ

4

Вы должны либо использовать Joda Time, если вы все еще используете Java 7 или выше (в этом случае вы должны также смотреть, чтобы перейти на Java 8), или java.time пакет, если вы используете Java 8.

В обоих случаях вам нужен класс LocalDate, который используется для представления даты без времени и без соответствующего часового пояса.

Это намного уборщик API для использования, чем устаревшие и ужасныйjava.util.Calendar (или java.util.Date). Нет причудливых константы не беспокоиться о вместо простых вызовов методов, нет 0 на основе месяцев и т.д.

Вы можете просто использовать:

date = date.plusDays(1); 

заранее дату. Большой!

+0

Вы должны пойти урожай. В наши дни все это гнев. –

+0

@Jon Skeet Я в настоящее время использую Java 8. Таким образом, вы бы порекомендовали LocalDate над JodaTime? – Hatefiend

+0

@Hatefiend: это LocalDate в обоих - но да, если вы используете Java 8, я бы использовал java.time. –

3

Если вы используете Java 7-, то java.util.Calendar класса обеспечивает add метод, который вы можете использовать, чтобы увеличить день/месяц/год/и т. д. на любую сумму, которую вы хотите. Вот пример, который добавляет 5 дней в данном календарном Например:

mycal.add(Calendar.DAY_OF_MONTH, 5); 

Если вы используете Java 8+, или иметь возможность включать Joda время в среде см ответ Джона Скита.

+0

Или ОП может присоединиться к 21-м веке, и использовать приличный API :) –

+0

@JonSkeet согласен, хотя есть в некоторых средах, где использующие нестандартные библиотеки (или даже компиляции и запуска на Java 8) не является option – ryanbwork

+1

Если в вопросе было указано *, что (и с учетом действительно веской причины для него - я слышу много причин *, которые должны быть отброшены), тогда это было бы разумно .... но «java. util.Calendar' должен быть * последним * вариантом, а не первым, что вы достигнете. –

2

Независимо от версии Java, я бы использовал Календарь. Я не буду полагаться на стороннюю банку для дат, когда JDK предоставляет решение.

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 
} 
} 
Смежные вопросы