우리가 알고 있는 시간은 10시10분10초 혹은 10:10:10 이렇게 표현이 되지만,

컴퓨터가 알고 있는 시간은 결국 long 타입이다.

실제로 컴퓨터 시간을 찍어보면 1265275107687 처럼 나온다.

(the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC)

여튼 그런데 프로그래밍할 때, 조작해보려면 여간 까다롭지 않다.

그래서 / % 연산자를 써서 C언어 식으로 조작할 수도 있지만,

자바에서는 가뿐하게 API를 사용해서 해결할 수 있다.


public void test() {
long today = System.currentTimeMillis(); // long 형의 현재시간
System.out.println(today);

DateFormat df = new SimpleDateFormat("HH:mm:ss"); // HH=24h, hh=12h
String str = df.format(today);
System.out.println(str);

Date date = new Date(today);
System.out.println(date);
}


currentTimeMillis() 는 아까 얘기했던 컴퓨터의 시간을 long 타입으로 읽어오는 메소드이다.

DateFormat 요 객체로 쉽게 조작이 가능한데, HH는 24시간제로 hh는 12시간제로 표시된다.

그리고 long 타입의 숫자를 Date 객체의 생성자에 넣어주면 자기가 알아서 파싱해준다.

예전에 쓰던 Date.parse() 따위 deprecated 된지 오래다.

위처럼 하면 결과는,

1265275107687
18:18:27
Thu Feb 04 18:18:27 KST 2010


요렇게 나온다.

자바 SimpleDateFormat 정리

yyyy : 년도

w : 일년안에서 몇번째 주인지

W : 한달안에서 몇번째 주인지

MM : 월

dd : 일

D : 일년에서 몇번째 일인지

E : 요일 (ex) TuesdayTue

F : 요일을 숫자로 (ex) 2

hh : 시간 ( 12시간 단위로 1-12) 

kk : 시간 (12시간 단위로 0-11)

HH : 시간 (24시간 단위로 1-24)

KK : 시간 (24시간 단위로 0-23)

a : PM 인지 AM 인지

mm : 분

ss : 초. second in minute

SSS : Millisecond

zzzz : General time zone (ex) Pacific Standard TimePSTGMT-08:00

Z : RFC 822 time zone (ex) -800

 

Date and Time PatternResult
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700

 

 

* 생성자

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

보통은 위와같이 쓰고

 

SimpleDateFormat(String pattern, Locale locale) 
Constructs a SimpleDateFormat using the given pattern and the default date format symbols for the given locale.

 

Locale 넣는것도 있음.

 

private static final SimpleDateFormat rfc822 = new SimpleDateFormat( "EEE, dd MMM yyyy HH:mm:ss z", Locale.US );


참조 - http://www.cyworld.com/integritian/3333889

Posted by linuxism
,