지시어 태그 - 페이지 태그와 날짜, 시간 클래스 (Date, SimpleDateFormat, Timestamp, Calendar)
jsp 파일을 생성하면 항상 최상단에 다음과 같은 페이지의 속성을 나타내는 태그가 삽입되어 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
html의 <meta charset="UTF-8"> 태그와 마찬가지로 이 페이지 태그가 빠지면
한글이 모두 깨져서 나온다.
import 문은 자바를 사용할때와 마찬가지로 클래스 명을 입력후 Shift + Space 를 누르면
목록이 뜨면서 선택할 수 있게 된다.
선택하면 최상단에 import문이 자동으로 생성된다.
import 문을 최상단에 사용하지 않을 때
java.util.Date d = new java.util.Date();
매우 비효율적이고 코드가 길어진다.
Date를 입력하고 Shift + Space 만 누르면 선택 가능한 클래스들이 나온다.
올바른 클래스를 선택하면 최상단에 바로 import 문이 자동 생성된다.
import 문을 최상단에 사용할 때
이 때, import 문은 페이지 최상단의 속성 태그 아래에 위치해야 한다.
그렇지 않으면 브라우저에 출력했을 때 아무것도 정보가 나오지 않는다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<%
Date d = new Date();
%>
현재시간1 : <%= d %> <br>
그렇지만 내가 보기에 편한 포맷은 아니다.
이럴 땐 SimpleDateFormat 클래스를 이용한다.
마찬가지로 import 해야 한다.
SimpleDateFormat 클래스를 불러오는 객체 안에 내가 보고 싶은 형식을 지정한다.
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%
Date d = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE요일");
%>
현재시간1 : <%= d %> <br>
현재시간2 : <%= sd.format(d) %>
Timestamp로 현재 시스템의 날짜,시간 정보를 구해온다.
기본 생성자는 없기 때문에 (); 로 처리하면 오류가 난다.
<%@page import="java.sql.Timestamp"%>
<%
Timestamp ts = new Timestamp(System.currentTimeMillis());
%>
현재시간3 : <%= ts %>
여기에서 SimpleDateFormat 클래스를 적용 가능하여 보기 편한 형식으로 출력 할 수 있다.
현재시간4 : <%= sd.format(ts) %>
Calendar 클래스를 살펴본다.
이 클래스는 new 연산자로 생성하지 않는다.
클래스 내의 정적 메소드 getInstance를 통해 불러온다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Calendar"%>
<%
Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH)+1; // Month는 0~11 범위 내에서 출력되므로 꼭 +1을 붙여준다
int d = c.get(Calendar.DATE);
%>
<%= y %>-<%= m %>-<%= d %>
12시간제로 표시할 때,
오전과 오후를 구해주는 필드 AM_PM 은 오전일 경우 0을 반환하고 오후일 경우 1을 반환한다.
그래서 조건문을 사용해 사용자가 알아보기 쉬운 문자로 반환한다.
int h1 = c.get(Calendar.HOUR); //12시간제
int h2 = c.get(Calendar.HOUR_OF_DAY); //24시간제
String h = "";
if(c.get(Calendar.AM_PM) == 0) {
h = "오전";
} else {
h = "오후";
}
12시간제 : <%= y %>-<%= m %>-<%= d %> <%= h %> <%= h1 %> <br>
24시간제 : <%= y %>-<%= m %>-<%= d %> <%= h %> <%= h2 %>
분, 초의 값도 구해본다.
int mm = c.get(Calendar.MINUTE);
int s = c.get(Calendar.SECOND);
12시간제 : <%= y %>-<%= m %>-<%= d %> <%= h %> <%= h1 %>:<%= mm %>:<%= s %><br>
24시간제 : <%= y %>-<%= m %>-<%= d %> <%= h2 %>:<%= mm %>:<%= s %>
이제 요일을 구해보는데, 숫자로 출력되기 때문에
사용자가 보기 편한 형식으로 보기 위해서 배열을 사용한다.
DAY_OF_WEEK는 1~7 사이의 값을 반환하는데, (1 : 일요일 ~ 7 : 토요일)
배열의 인덱스는 0부터 시작된다는 점을 잘 기억해야 한다.
0번 값을 비워두고 시작하거나 출력시 연산을 한다.
int week = c.get(Calendar.DAY_OF_WEEK);
String[] weekend = {"일", "월", "화", "수", "목", "금", "토" };
12시간제 : <%= y %>-<%= m %>-<%= d %> <%= h %> <%= h1 %>:<%= mm %>:<%= s %>
<%= weekend[week-1] %>요일<br>
24시간제 : <%= y %>-<%= m %>-<%= d %> <%= h2 %>:<%= mm %>:<%= s %>
<%= weekend[week-1] %>요일