요즘 자바 고급으로 넘어가면서, 나 포함 함께 공부하는 분들 모두 어려워하는 것 같았다.
그래서 강사님이 진도를 더 안 나가시고 OOP의 문법과 MV를 바탕으로 실습을 더 하셨다.
다만 오늘은 ‘날짜, 시간 관련 데이터’까지 다루는 걸 포함해서 실습 문제가 나왔다.
날짜나, 시간 등을 표현하기 위해 각 프로그래밍 언어마다 만들어진 기능을 ‘Time Stamp’ 라고 하고 long
으로 반환한다.
구체적으로 1970년 1월 1일을 기준으로 현재까지 흐른 시간을 초 단위로 반환하는 것이다.
자바에서는 다음과 같은 방법으로 꺼내온다.
long currentTime = System.currentTimemillis();
말 그대로 millis의 범위까지 표현해서 반환받은 값의 뒤 3자리는 0.1초, 0.01초, 0.001초를 표현한다.
근데 ‘초’로 표현된 값을 우리가 쉽게 날짜로 응용할 순 없다.
이를 위해선 클래스를 이용하여 우리가 원하는 형태로 변환시켜야 한다.
자바에서는 SimpleDateFormat
클래스를 사용한다.
SimpleDateFormat sdf = new SimpleDateFormat();
이때 생성자에 String
으로 날짜의 형태를 지정해줘야 한다.
{ y / M / D / h / m /s }
“yyyy년 MM월 dd일 hh시 mm분 ss초”
문자열 구조를 생성자에 인자값으로 넣어주고 .format
메서드를 이용해서 현재 시간을 long
값으로 넘겨준다.
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy년 MM월 dd일 hh시 mm분 ss초”);
String dayFormat = sdf.format(currentTime);
System.println(dayFormat);
여기서 추가적인 표기방식으로 다음 규칙이 있다.
하지만, 우리는 반대의 상황도 할 줄 알아야 한다.
즉, 정해진 날짜를 초 단위로 변환시킬 줄 알아야 한다.
“2025년 12월 25일” 이라는 문자열이 주어졌다. 이를 시간으로 바꾸면 과연 몇 초일까?
① 해당 양식과 똑같은 SimpleDateFormat
인스턴스를 하나 만들어 준다.
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy년 MM월 dd일”);
② 문자열의 값을 Date 클래스로 반환 받는다. 이때, util의 Date 클래스를 import
해야한다.
import java.util.Date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
String a = "2025년 12월 25일";
Date b = sdf.parse(a);
③ date의 getTime()로 long
값을 반환받는다.
b.getTime()
sdf.parse(a).getTime();
System.out.println(sdf.parse(a).getTime());