Mam obiekt Date w Javie przechowywany jako typ Data Java.
Mam również datę utworzenia kalendarza gregoriańskiego. Gregoriańska data kalendarzowa nie ma parametrów i dlatego jest instancją dzisiejszej daty (i godziny?).
Z datą java chcę uzyskać rok, miesiąc, dzień, godzinę, minutę i sekundy z typu daty java i porównać datę gregoriancalendar.
Widziałem, że w tej chwili data Java jest przechowywana jako długa i jedyne dostępne metody wydają się po prostu pisać jako sformatowany ciąg daty. Czy istnieje sposób na dostęp do roku, miesiąca, dnia itp.?
Widziałem, że getYear()
, getMonth()
itd metody Date
klasy są nieaktualne. Zastanawiałem się, jaka jest najlepsza praktyka korzystania z instancji Java Date, którą mam z tą GregorianCalendar
datą.
Moim celem końcowym jest wykonanie obliczenia daty, dzięki czemu mogę sprawdzić, czy data Java jest w ciągu tylu godzin, minut itp. Od dzisiejszej daty i godziny.
Nadal jestem nowicjuszem w Javie i trochę mnie to zastanawia.
źródło
Date.getYear()
. Ma problemy (których nie wiem).Date.getYear()
raz przeanalizowałem moją datę 30.06.2017 i zwróciłem rok jako 117. Zobacz, gdzie wylądował dwa tysiące lat temu. Ale kiedy drukuję po prostu obiekt daty, wynik był w porządku, ale nieDate.getYear();
.Odpowiedzi:
Użyj czegoś takiego:
Uwaga, miesiące zaczynają się od 0, a nie 1.
Edycja : Od wersji Java 8 lepiej jest używać java.time.LocalDate niż java.util.Calendar . Zobacz tę odpowiedź za, jak to zrobić.
źródło
cal.add(Calendar.DAY_OF_MONTH, -48)
do wykonywania arytmetyki dziennej na obiektach kalendarza. I możesz porównać dwa obiekty kalendarza za pomocącal.compareTo(anotherCal)
.W Javie 8 i nowszych można konwertować obiekt Date na obiekt LocalDate, a następnie łatwo uzyskać rok, miesiąc i dzień.
Zauważ, że
getMonthValue()
zwraca wartość int od 1 do 12.źródło
LocalDate
w Javie 8 to najlepsze rozwiązanie, które oszczędza Twój czas, inne rozwiązanie używaCalendar
iDate
jest pełne kłopotów.Możesz zrobić coś takiego, to wyjaśni, jak
Date
działa klasa.źródło
mm
oznacza minuty, a wielkaMM
oznacza miesiąc roku.EDYCJA: Dane wyjściowe dla
date
=Fri Jun 15 09:20:21 CEST 2018
to:źródło
źródło
źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz spuścizną , wyparte przez klasy java.time wbudowane w Javę 8 i nowsze wersje . Zobacz samouczek Oracle .getYearMonthDay2 (rozwiązanie kalendarza) jest dziesięć razy szybsze. Teraz masz rrrr MM dd 00 00 00, a następnie porównaj używając date.compare
źródło
To może być łatwiejsze
źródło
Ostrożnie montuj zacznij od 0, a nie 1. A także kalendarza używaj pm tak jak jestem, więc bądź bardzo ostrożny, gdy używasz godzin i minut.
źródło