Tartalomjegyzék
Java Dátum és idő
- Szerző: Sallai András
- Copyright © 2014, Sallai András
- Szerkesztve: 2014, 2015, 2019, 2022, 2023
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
A java.util.Date és java.sql.Date osztályok szokásos osztályok dátumok és idők tárolására, viszont sok elavult konstruktorral és metódussal rendelkeznek. Használjuk helyette a következő osztályokat:
- java.time.LocalDate
- java.time.LocalTime
- java.time.LocalDateTime
Dokumentáció:
System osztály
Az aktuális időt megkaphatjuk milliszekundumban, ami az eltelt milliszekundumok 1970-01-01 óta:
System.out.println( System.currentTimeMillis() );
Megkaphatjuk a unix időbélyeget a currentTimeMillins() eredményét elosztva 1000-el.
long unixTime = System.currentTimeMillis() / 1000L;
Ezt egyszerűen MySQL-be írhatjuk.
Date osztály
A dátum tárolására alkalmas egyik osztály a Date. A DateFormat osztály csak formázásra használjuk, a tárolást a Date osztály végzi.
- Program01.java
import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; class Program01 { public static void main(String[] args) { Date datum = new Date(); DateFormat forma =new SimpleDateFormat("hh:mm:ss aa"); System.out.println(forma.format(datum)); } }
A datum tartalmazza az aktuális dátumot, a datumFormatum objektum pedig a kiíratás formátumát.
yyyy | év |
MM | hónap |
dd | nap |
HH | óra |
mm | perc |
ss | másodperc |
Egy komplex példa:
"yyyy-MM-dd HH:mm:ss"
A Date() konstruktor paraméterként elfogad egy long értéket:
long milliszekundum = 1681239712847L; Date datum = new Date(milliszekundum);
Ugyanakkor a Date objektumból lekérhető az aktuális idő long formátumban:
Date most = new Date(); long milliszekundum = most.getTime();
Calendar
A Calendar osztályt a java.util csomagban található. Általános Dátum és idő számításokhoz használható.
- Program01.java
import java.util.Calendar; class Program01 { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY,17); cal.set(Calendar.MINUTE,30); cal.set(Calendar.SECOND,0); cal.set(Calendar.MILLISECOND,0); System.out.println(cal.get(Calendar.HOUR_OF_DAY)); } }
Calendar cal = Calendar.getInstance(); System.out.println(cal.get(Calendar.YEAR)); System.out.println(cal.get(Calendar.MONTH)); System.out.println(cal.get(Calendar.DAY_OF_MONTH));
A hónapok esetén a januárt 0 képviseli!
Calendar ger = new GregorianCalendar(2015, Calendar.JANUARY, 2); System.out.println(ger.get(Calendar.MONTH));
Összehasonlítás:
Calendar ger = new GregorianCalendar(2015, Calendar.JANUARY, 2); Calendar gerMost = new GregorianCalendar(2015, Calendar.JANUARY, 2); if(ger.compareTo(gerMost)==0) { System.out.println("egyezik"); }
Calendar most = new GregorianCalendar(2015, Calendar.MARCH, 2); Calendar esemeny = new GregorianCalendar(2015, Calendar.APRIL, 1); // after/before if(esemeny.after(most)) { System.out.println("utána"); }
Calendar cal = Calendar.getInstance(); cal.set(2015, 2, 15); cal.add(Calendar.DAY_OF_MONTH, 1); System.out.println(cal.get(Calendar.YEAR)); System.out.println(cal.get(Calendar.MONTH)); System.out.println(cal.get(Calendar.DAY_OF_MONTH));
GregorianCalendar
Calendar cal = new GregorianCalendar(); int ev = cal.get(Calendar.YEAR); int honap = cal.get(Calendar.MONTH); System.out.printf("%d-%d\n", ev, honap);
Calendar cal = new GregorianCalendar(); // A dátum egy komponensének lekérdezése int era = cal.get(Calendar.ERA); // 0=BC, 1=AD int year = cal.get(Calendar.YEAR); // 2002 int month = cal.get(Calendar.MONTH); // 0=Jan, 1=Feb, ... int day = cal.get(Calendar.DAY_OF_MONTH); // 1... int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1=Sunday, 2=Monday, ...
//metódus 1 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dateWithoutTime = sdf.parse(sdf.format(new Date())); //metódus 2 Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); dateWithoutTime = cal.getTime();
public void convertDateToString() { Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyy/MM/dd"); try { System.out.println("Ma: " + dateFormat.format(calendar.getTime())); } catch (Exception e) { e.printStackTrace(); } }
Employee osztályban
- App.java
import java.util.GregorianCalendar; import java.util.Calendar; class Employee { String name; GregorianCalendar dateOfBirth; public Employee (String name, int year, int month, int day) { this.name = name; this.dateOfBirth = new GregorianCalendar (year, month, day); } } public class App { public static void main(String[] args) { Employee emp = new Employee("Tréner Ferenc", 1982, 5, 27); System.out.println(emp.dateOfBirth.get(Calendar.YEAR)); System.out.println(emp.dateOfBirth.get(Calendar.MONTH)); System.out.println(emp.dateOfBirth.get(Calendar.DATE)); } }
Vegyes
- Program01.java
import java.util.Date; import java.util.Calendar; import java.text.SimpleDateFormat; class Program01 { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); Date datum = cal.getTime(); SimpleDateFormat forma =new SimpleDateFormat("hh:mm:ss aa"); System.out.println(forma.format(datum)); } }
- Program2.java
import java.util.Calendar; import java.text.SimpleDateFormat; class Program2 { public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss"; public static String now() { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); return sdf.format(cal.getTime()); } public static void main(String[] argv) { System.out.println(now()); } }
Más formátumban:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");
Dátum GregorianCalendarból:
Date datum = new GregorianCalendar(2015, Calendar.MARCH, 2).getTime(); System.out.println( (new SimpleDateFormat("yyyy").format(datum)) );
SimpleDateFormat
Betű | Dátum vagy időkomponens | megjelenés | Példa |
---|---|---|---|
G | időszámításunk előtt vagy után | szöveg | AD, i. u. |
y | év | év | 1996; 96 |
Y | hét év | év | 2009; 09 |
M | az év hónapja | hónap | July; Jul; 07 |
w | az év hete | szám | 27 |
W | a hét egy hónapban | szám | 2 |
D | nap az évben | szám | 189 |
d | a hónap napja | szám | 10 |
F | egy hónapban a hét napja | szám | 2 |
E | a hét napjának neve | szöveg | Tuesday; Tue |
u | a hét napjának száma (1 = Monday, …, 7 = Sunday) | szám | 1 |
a | AM vagy PM jelölő | szöveg | PM |
H | a nap hányadik órája (0-23) | szám | 0 |
k | a nap hányadik órája (1-24) | szám | 24 |
K | hányadik óra délután vagy délelőtt (0-11) | szám | 0 |
h | hányadik óra délután vagy délelőtt (1-12) | szám | 12 |
m | az óra hányadi perce | szám | 30 |
s | percen belüli másodpercek | szám | 55 |
S | millimásodperc | szám | 978 |
z | időzóna | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | időzóna | RFC 822 időzóna | -0800 |
X | időzóna | ISO 8601 időzóna | -08; -0800; -08:00 |
java.sql.Date
A java.sql.Date osztályt a JDBC API használja. Ha szeretnél beállítani egy dátumot a java.sql.PreparedStatement vagy visszakapni egy dátumot a java.sql.ResultSet használatával, akkor erre van szükségünk.
A java.sql.Date valójában a java.util.Date osztály az őse.
- Program01.java
import java.text.SimpleDateFormat; class Program01 { public static void main(String[] args) { long time = System.currentTimeMillis(); java.sql.Date datum = new java.sql.Date(time); SimpleDateFormat forma = new SimpleDateFormat("hh:mm:ss"); System.out.println(forma.format(datum)); } }
A java.sql.Date nem képviseli az időt, csak a dátumot, ellentétben a java.util.Date osztállyal. Az idő megőrzéséhez a java.sql.Timestamp osztályt használhatjuk.
java.sql.Timestamp osztály
A java.sql.Timestamp osztályt a JDBC API használja. Ha szeretnél beállítani egy dátumot vagy időt a java.sql.PreparedStatement vagy visszakapni egy dátumot vagy időt a java.sql.ResultSet használatával, akkor erre van szükségünk.
A java.sql.Timestamp alkalmas a nanomásodperc tárolására is.
TimeZone
A java.util.TimeZone osztály az időzónák kezelését teszi lehetővé. Lehetőség van a nyári időszámítás kezelésére is.
TimeZone tz = TimeZone.getTimeZone("Europe/Budapest");
A használható azonosítók lekérdezhetők a TimeZone.getAvailableIDs() metódussal:
for(String egy : TimeZone.getAvailableIDs()) { System.out.println(egy); }
Időzóna lekérdezése:
LocalDate
Dátum tárolása
import java.time.LocalDate; class Program01 { public static void main(String[] args) { LocalDate localDate = LocalDate.of(2019,10,5); System.out.println(localDate); System.out.printf("%d\n", localDate.getYear()); } }
Szöveges dátum LocatDate formára
- Program01.java
import java.time.LocalDate; class Program01 { public static void main(String[] args) { LocalDate ld2 = LocalDate.parse("2019-09-25"); System.out.println(ld2); } }
Formázott kivitel
import java.time.LocalDate; import java.time.format.DateTimeFormatter; class Program01 { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy. LLL dd."); LocalDate date = LocalDate.parse("2019-09-25"); System.out.println(formatter.format(date)); } }
A kimenet:
2019. szept. 25.
Dátum kibontása
import java.time.LocalDate; class Program01 { public static void main(String[] args) { LocalDate date = LocalDate.parse("2019-09-25"); System.out.printf("%d-%d-%d\n", date.getYear(), date.getMonthValue(), date.getDayOfMonth() ); } }
Összehasonlítás
Lehetőségek:
- isAfter()
- isBefore()
- isEqual()
- App.java
import java.time.LocalDate; import java.time.ZoneId; class App { public static void main(String[] args) { LocalDate localDate = LocalDate.parse("2023-04-05"); System.out.println(localDate.getMonthValue()); System.out.println(localDate.getYear()); LocalDate most = LocalDate.now(ZoneId.of("GMT+2")); System.out.println(most); if(localDate.isBefore(most)) { System.out.println("előtte van"); }else { System.out.println("utána van"); } } }
Forrás
LocalDateTime
Dátum és idő tárolása
import java.time.LocalDateTime; class Program01 { public static void main(String[] args) { LocalDateTime dateTime = LocalDateTime.now(); System.out.printf("%d-%d-%d %d:%d:%d\n", dateTime.getYear(), dateTime.getMonthValue(), dateTime.getDayOfMonth(), dateTime.getHour(), dateTime.getMinute(), dateTime.getSecond() ); } }
Dátum és idő megadása
import java.time.LocalDateTime; import java.time.Month; class Program01 { public static void main(String[] args) { LocalDateTime dateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 26, 20, 1, 30); System.out.printf("%d-%d-%d %d:%d:%d\n", dateTime.getYear(), dateTime.getMonthValue(), dateTime.getDayOfMonth(), dateTime.getHour(), dateTime.getMinute(), dateTime.getSecond() ); } }
LocalTime
Idő tárolása
import java.time.LocalTime; import java.time.ZoneId; class Program01 { public static void main(String[] args) { LocalTime time = LocalTime.now(ZoneId.of("Europe/Budapest")); System.out.println(time); } }
Idő megadása
import java.time.LocalTime; class Program01 { public static void main(String[] args) { LocalTime time = LocalTime.of(12,20,25,40); System.out.println(time); } }