[Java] Convert timestamp(long) to date time string format and vice versa
Converting timestamp to date time string format and vice versa
μ€μ μ 무μμ javaλ‘ νλ‘κ·Έλλ° ν λ λ μ§/μκ°μ λ€λ€μΌ ν λκ° μ°Έ λ§μ΅λλ€.
λ°μ΄ν° μ λ°μ΄νΈ μκ°μ κΈ°λ‘νκ±°λ λ‘κΉ μ νκ±°λ λ±λ± λ§μ΄μ£ .
κ·Έλμ μ€λμ μκ° λ³νμ λν΄μ μ§§κ² νκ°μ§λ§ μλ €λ립λλ€.
μλ° νλ‘κ·Έλλ°μ μμνμ§ μΌλ§ μλμμ λ System.currentTimemillis()λ₯Ό μ΄μ©ν΄μ λ΄κ° μμ±ν μκ³ λ¦¬μ¦μ΄ μΌλ§λ 빨리 λμκ°λμ§ νμΈμ νμλλ°μ, μ ν¨μμ κ²°κ³Όλ longνμ λλ€.
1970λ 1μ 1μΌ UTC μμ μ΄νλ‘ λͺ λ°λ¦¬μ΄κ° μ§λ¬λμ§λ₯Ό λ°νν΄μ£Όμ£ .
λ°νκ°μ λν μ νν μ μλ μλμ κ°μ΅λλ€.
* @return the difference, measured in milliseconds, between
* the current time and midnight, January 1, 1970 UTC.
κ·Έλ°λ° μ΄ longν μ«μλ κΈΈμ΄λ κΈΈκ³ μ΄κ² λλ체 κ·Έλμ λͺ μΌ λͺ μ λΌλ 건μ§λ₯Ό μμλ³΄κΈ°κ° νλ€μ£
κ·Έλμ μ΄ longν μ«μλ₯Ό κ°λ μ±μκ² μ°λ¦¬κ° μΌλ°μ μΌλ‘ μ¬μ©νλ μκ° ν¬λ§·μ λ§κ² String νμ μΌλ‘ λ³ννλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ? κ·Έλ¦¬κ³ κ·Έλ κ² μ»μ String νμ μκ°κ°μ λ€μ longνμΌλ‘ λ³ννλ €λ©΄ λ μ΄λ»κ² ν΄μΌ ν κΉμ?
μ°μ longνμ μκ°μ μνλ μΌμ ν¬λ§·μΌλ‘ λ³κ²½νλ κ²μ Dateμ SimpleDateFormatμ μ΄μ©νλ©΄ μ½κ² λ³νν μ μμ΅λλ€. μλμ κ°μ΄ λ§μ΄μ£ .
public static void main(String[] args) {
Date d = new Date(vv);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String bb = format.format(d);
System.out.println(bb);
}
λ°λλ‘ StringμΌλ‘ λ μΌμλ₯Ό longμΌλ‘ λ³νν λλ μλμ κ°μ΄ java.sql.Timestampλ₯Ό μ΄μ©νλ©΄ μ½κ² λ³νμ΄ κ°λ₯ν©λλ€.
public static void main(String[] args) {
String prdt = "2020-01-10 10:38:09.419";
long vv = Timestamp.valueOf(prdt).getTime();
System.out.println(vv);
}
νμ§λ§ Timestamp.valueOf(String) λ©μλλ "yyyy-mm-dd hh:mm:ss[.fffffffff]" ννμ stringλ§ μ λ ₯ κ°λ₯ν©λλ€.
μΌμλ§ μκ±°λ μκ°κ°λ§ μμΌλ©΄ μ¬μ©μ΄ λΆκ°λ₯ νλ€λ κ² λͺ μ¬νμΈμ.
λ§μ½ μΌμ ν¬λ§·μ μλͺ» μ λ ₯νλ©΄ μλμ κ°μ μ€λ₯κ° λ°μν©λλ€.
Exception in thread "main" java.lang.IllegalArgumentException:
Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
java.sql.Timestamp λμ μ LocalDateTimeμ μ΄μ©ν μλ μμ΅λλ€.
public static void main(String[] args) {
String prdt2 = "2020-01-11 00:00:00";
System.out.println(Timestamp.valueOf(prdt2).getTime());
System.out.println(LocalDateTime.parse("2020-01-11T00:00:00")
.atZone(ZoneId.of("Asia/Seoul"))
.toInstant()
.toEpochMilli());
}
---μΆλ ₯κ²°κ³Ό---
1578668400000
1578668400000
νμ§λ§ LocalDateTimeμ κ²½μ° parseν λ λ€μ΄κ°λ stringννμ μΌμκ°μ 'T'ꡬλΆμλ₯Ό ν¬ν¨ν΄μ€μΌ ν©λλ€.
κ·Έλ μ§ μμ κ²½μ° μλμ κ°μ΄ νμ±μ€λ₯κ° λ°μν©λλ€.
Exception in thread "main" java.time.format.DateTimeParseException:
Text '2020-01-11 00:00:00' could not be parsed at index 10
Summary
μ΄λ² ν¬μ€ν μμλ μλ°μμ longνμ μ timestampeλ₯Ό String νμ μ κ°λ μ± μ’μ ννλ‘ λ³ννλ μμ κ³Ό κ·Έλ κ² λ³νλ Stringμ λ€μ longμΌλ‘ λ³κ²½νλ λΆλΆμ λν΄μ μμ보μμ΅λλ€.
long -> String -> long λ³κ²½μ νμ λ λμΌν κ°μ΄ λμ€λμ§λ μλ ν μ€νΈλ₯Ό ν΅ν΄μ νμΈν μ μμμ΅λλ€.
public static void main(String[] args) {
// String to long conversion 1
String prdt = "2020-01-11 10:24:09.419";
long l1 = Timestamp.valueOf(prdt).getTime();
System.out.println(l1);
// String to long conversion 2
String prdt2 = "2020-01-11T10:24:09.419";
long l2 = LocalDateTime.parse(prdt2)
.atZone(ZoneId.of("Asia/Seoul"))
.toInstant()
.toEpochMilli();
System.out.println(l2);
// long to String conversion
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(format.format(new Date(l1)));
}
---μΆλ ₯κ²°κ³Ό---
1578705849419
1578705849419 <-- Timestampλ₯Ό μ΄μ©ν΄μ μ»μ κ²°κ³Όμ λμΌν¨μ νμΈ
2020-01-11 10:24:09.419 <-- longμΌλ‘ λ³ννλ String ννμ μκ°κ³Ό λμΌνκ² μΆλ ₯λλμ§ νμΈ
μ΄μμΌλ‘ Javaμμ datetimeμ longμμ StringμΌλ‘ λ€μ Stringμμ longμΌλ‘ λ³ννλ λ°©λ²μ λν΄μ μμ보μμ΅λλ€.
μ μ©νλ€λ©΄ κ³΅κ° κΎΉ λΆνν΄μ~