Mai mult
Cum pentru a compara datele în Java?
Cum am compara datele intre în Java?
Exemplu:
data 1 este 22-02-2010
data2 este 07-04-2010 azi <br /> date3 este
25-12-2010`
date3
este întotdeauna mai mare decât data 1 " și " data2` este mereu astăzi. Cum pot verifica dacă astăzi's date este în între data 1 și 3 data?
367
11
[Data][1] a [înainte][2] și [după][3] metode și poate fi [comparativ cu fiecare alte][4] după cum urmează:
Pentru o inclusive comparație:
Folosi compareTo:
date1.compareTo(data2);
Următoarele sunt cel mai comun mod de a compara datele. Dar am prefera prima
Abordare-1 : Folosind Data.înainte de a(), Data.după() și Data.este egal cu()
Abordare-2 : Data.compareTo()
tl;dr
Sau, mai bine, dacă adăugați ThreeTen-Extra biblioteca dvs. de proiect.
Jumătate-o abordare deschisă, în cazul în care începutul este inclusive în timp ce se încheie este exclusiv.
Alegere proastă de Format
Apropo, asta e o alegere proasta a format o reprezentare a textului de o data sau data-valoarea în timp. Ori de câte ori este posibil, rămânem cu standardul ISO 8601 formate. ISO 8601 formate sunt clare, ușor de înțeles în culturile umane, și sunt ușor de a analiza de mașină. Pentru o dată-doar o valoare, formatul standard este AAAA-LL-ZZ. Notă modul în care acest format are avantajul de a fi cronologică când sortate în ordine alfabetică.
LocalDate
A
LocalDate
clasa reprezinta o dată-numai valoarea fara timp-de-zi și fără de fus orar. Un fus orar este esențială în a stabili o întâlnire. Pentru un moment dat, la data variază în jurul valorii de lume prin zona. De exemplu, la câteva minute după miezul nopții, în Paris, Franța este o nouă zi în timp ce încă mai "ieri" în Emiléal Québec.DateTimeFormatter
Ca dvs. de intrare siruri de caractere sunt non-standard format, trebuie să definim un model de formatare pentru a se potrivi.
Folosi pentru a analiza input siruri de caractere.
În data de timp, de muncă, de obicei cel mai bine pentru a defini un interval de timp de Jumătate de abordare Deschisă în cazul în care începutul este inclusive în timp ce finalul este exclusiv. Așa că vreau să știu dacă astăzi este același sau mai târziu decât la început și, de asemenea, înainte de oprire. Un purtător de cuvânt mod de a spune "este același sau mai târziu decât începutul" este ", nu înainte de a începe".
A se vedea Răspunsul de gstackoverflow arată lista de comparație metode pe care le puteți apela.
Despre java.timp
De java.time cadrul este construit în Java 8 și mai târziu. Aceste clase înlocui supărătoare vechi legacy data de clase, cum ar fi
java.util.Data
,Calendar
, &SimpleDateFormat
. De Joda-Time, proiect, acum în modul de întreținere, sfătuiește migrației la java.time clase. Pentru a afla mai multe, consultați Oracle Tutorial. Și de căutare Stack Overflow pentru mai multe exemple și explicații. Caietul de sarcini este JSR 310. În cazul în care pentru a obține java.timpul clase?A se vedea Cum să utilizați ThreeTenABP.... De ThreeTen-Extra proiectul se extinde java.timp cu clase suplimentare. Acest proiect este un teren de testare pentru posibile viitoare completări la java.timp. S-ar putea găsi unele clase utile, cum ar fi
Interval
,YearWeek
,YearQuarter
, și mai mult.UPDATE: Acest "Joda-Timp", secțiunea de mai jos este lăsat intact ca istorie. De Joda-Time, proiect, acum în modul de întreținere, sfătuiește migrației la java.time clase. Joda Timp
Alte răspunsuri sunt corecte cu privire la pachet java.util.Data și java.util.Calendar cursuri. Dar aceste clase sunt foarte supărătoare. Deci, aici's un exemplu folosind codul Joda-Time 2.3 bibliotecă. Dacă îți dorești cu adevărat o data, fara nici o parte și nici de fus orar, apoi utilizați
LocalDate
clasă în Joda Timp. Această clasă oferă metode de comparație, inclusivcompareTo
(folosit cu Java Comparatoare),isBefore
,isAfter", și " egala cu
. Intrări...A defini un formator descrie intrare siruri de caractere...
Utilizați formatare pentru a analiza siruri de caractere în LocalDate obiecte...
Groapa de gunoi de la consola...
Atunci când a alerga...
Deci, să vedem dacă cea de-a doua este între celelalte două (exclusiv, sensul nu este egal cu nici endpoint)...
De Lucru Cu Deschideri De Timp
Dacă lucrați cu deschideri de timp, îți sugerez explorarea în Joda Timp pe clase: Durata, Interval, și Perioada. Metode, cum ar fi
se suprapun
și "conține" face comparații ușor. Pentru textul reprezentări, uita-te la standardul ISO 8601 este:Format: PnYnMnDTnHnMnS
Exemplu: P3Y6M4DT12H30M5S
(Înseamnă "de trei ani, șase luni de zile, patru zile, douăsprezece ore, treizeci de minute și cinci secunde")
Format: start/end
Exemplu: 2007-03-01T13:00:00Z/2008-05-11T15:30:00Z Joda-Time clase poate lucra cu siruri de caractere în ambele formate, atât ca intrare (parsarea) și de ieșire (generatoare de siruri de caractere). Joda Timp efectuează comparații folosind semi-Deschis abordare în cazul în care începutul de durata e inclusive în timp ce finalul este exclusiv. Această abordare este una înțeleaptă pentru manipularea se întinde de timp. Căutare StackOverflow pentru mai multe informații.
Compară cele două date:
Update pentru Java 8 și mai târziu
isAfter()
isBefore()
isEqual()
compareTo()
Aceste metode există în
LocalDate
,LocalTime
,LocalDateTime
clase.Aceste clase sunt construite în Java 8 și mai târziu. Mult de java.timp de funcționalitate este adaptată pentru Java 6 & 7 în ThreeTen-Backport și, de asemenea, adaptate la Android în ThreeTenABP (vezi Cum să utilizați...).
Puteți utiliza [
Data.getTime()
][1], care:Acest lucru înseamnă că puteți compara-le ca numere:
Utilizarea getTime() pentru a obține valoarea numerică a datei, și apoi compara folosind valorile returnate.
Încercați acest lucru
Această metodă a funcționat pentru mine:
Acest cod a determina astăzi este, în unele durata.. pe baza COREEA locale