Co mogę użyć do zastąpienia tego, new Date(2009, 12, 9)
?Sparametryzowane konstruktory klasy java.util.Date są przestarzałe. Jaka jest alternatywa?
Dzięki za pomoc.
Co mogę użyć do zastąpienia tego, new Date(2009, 12, 9)
?Sparametryzowane konstruktory klasy java.util.Date są przestarzałe. Jaka jest alternatywa?
Dzięki za pomoc.
Zamiast tego najlepiej użyć numeru Joda Time. Jest to nieskończenie lepszy interfejs API do wbudowanego. Jeśli chcesz, możesz wybrać między LocalDateTime
i DateTime
w zależności od Twoich konkretnych wymagań (to skomplikowany obszar - nie będę próbował podsumować w zdaniu lub dwóch, ale docs wykonać dobrą robotę).
Jeśli jest to absolutnie konieczne, użyj java.util.Calendar i przekonwertuj je na Date
, kiedy zajdzie taka potrzeba.
+1 dla Joda Time, to marzenie w porównaniu z datą i kalendarzem. –
Mogło być świetnie, ale używam gxt (google toolkit i ext js), więc myślę, że muszę użyć obiektu daty z tym API. – Tim
@Tim: To * zawsze * warto wspomnieć o niestandardowych środowiskach w pytaniu ... –
Jeśli spojrzysz na Javadoc, wskazuje to na użycie Calendar.
W JDK wersja 1.1 zastąpiono Calendar.set (+ 1900 roku, miesiąc daty, godziny, min), kalendarz gregoriański (lata + 1900, miesiąc, data godzin, min).
Jeśli spojrzeć na konstruktora Date
params zobaczysz dlaczego została zaniechana:
Parametry:
year - the year minus 1900. month - the month between 0-11. date - the day of the month between 1-31. hrs - the hours between 0-23. min - the minutes between 0-59.
year
nie jest to, czego się spodziewać i nie jest month
.
Do reprezentowania datę wspomniałem trzeba zadzwonić Date
tak (nie zalecane)
new Date(2009-1900, 12-1, 9)
Alternatywą korzystania Calendar
jest
Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();
Miesiąc kalendarza nadal opiera się na zera. – BalusC
faktycznie, miesiąc jest tym, czego oczekiwałbym. To data, która doprowadza mnie do szału. Wszystko w Javie opiera się na zerach, z wyjątkiem daty! – David
@BlausC: Tak jest. Nic dziwnego, że ludzie wolą używać daty daty w formacie Joda zamiast tego biednego interfejsu Calendar API. – pjp
GregorianCalendar(year + 1900, month, date)
Aby zamienić 'new Date (...)', musisz dodać '.getTime()'. –
Można również użyć obiektu SimpleDateFormat:
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class DateTest {
public static void main(String [] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy, MM, dd");
Date date = sdf.parse("2009, 12, 9");
System.out.println(date);
}
}
Po prostu uważaj, aby nie wprowadzać 'SimpleDateFormat' do' statycznej' instancji, ponieważ nie jest bezpieczna dla wątków. Zobacz http://www.ibm.com/developerworks/java/library/j-jtp09263.html – pjp
: -o nie wiedziałem, że nie jest bezpieczny dla wątków. Na szczęście większość czasu, kiedy go użyłem (chociaż zadeklarowany jako członek klasy) znajdował się w bezpiecznym kontekście wątku :) – OscarRyz
Niestety data wsparcie w Java jest całkowicie okropne. Oficjalnie musisz to zrobić w Kalendarzu, ale moim zdaniem nie powinno to być konieczne. Jak wspomnieli inni, czas Joda jest o wiele lepszy, ale wciąż nie tak łatwy w użyciu jak daty w Ruby on Rails.
Nie jestem świadomy żadnego pakietu Javy, który daje taką ilość wsparcia dat (Joda wypada krótko, ale jest blisko), ale w Groovy użycie TimeCategory daje bardzo Ruby na obsługę dat w Railsach .
Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);
Zauważ, że nie wprowadził w grudniu 12, bo to rzeczywiście 11 (styczeń jest 0).
Następnie, można dodać lub usunąć sekund, minut, godzin, dni, miesięcy lub lat z łatwością:
cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);
I wreszcie, jeśli chcesz Data:
cal.getTime();
Twoje przykłady "dodaj" używają niewłaściwej kolejności parametrów, powinno to być cal.add (Calendar.HOUR, 2) –
Należy pamiętać, że w przypadku tego rozwiązania godziny, minuty, sekundy (i ułamki) są ustawione na ich bieżącą wartość. To nie jest naprawdę czyste. – tos
Tim, w swoich komentarzach wspomniałeś, że robisz to w kontekście GXT - tj. w kodzie klienta GWT. GWT nie obsługuje kalendarza gregoriańskiego, a najprawdopodobniej nie będziesz w stanie umieścić JodaTime w GWTCompilatorze (możesz być w stanie, ale naprawdę chcesz).
Wydaje mi się, że naprawdę pozostało ci z opcją korzystania z JNSI, jeśli chcesz wykonywać operacje kalendarza w GWT. Zobacz klasę Data w JavaScript.
Nie bez powodu, jeśli chcesz 12 grudnia 2009, potrzebujesz 'nowej daty (109, 11, 9)'. – Yishai
@Yishai: Spieram się, że powody są "dobre". –
@Yaiai: To wydaje się być bardziej arbitralnym zaciemnieniem niż pomocne. – Sukasa