Tartalomjegyzék

< Java

Java Dátum és idő

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:

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));	
Program3.java
class Program3 {
	public static void main(String args[]) {
		java.util.Calendar c = java.util.Calendar.getInstance();		
		System.out.println(String.format("Születésnap: %1$tY-%1$tm-%1$te", c));		
	}
}

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:

Program01.java
class Program01 {
	public static void main(String args[]) {
		java.util.Calendar cal = java.util.Calendar.getInstance();
		java.util.TimeZone idozona = cal.getTimeZone();
		System.out.println("Az időzóna : " + idozona.getDisplayName());
	}
}

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:

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);
	}
}

Linkek