[API 알아보기]
1) java.util.Date, java.util.Calendar
- 시스템 날짜, 시간 관련 유틸리티 객체
/*
[Date + SimpleDateFormat]
1) 시스템의 날짜, 시간을 읽을 수 있는 유틸리티
2) 날짜를 주고 받을 때 주로 사용
3) java.text.SimpleDateFormat 메서드로 특정 포맷 출력 가능 : 패턴 지정해줘야함
- Format 관련 패키지 : java.text
*/
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
//다양한 생성자가 있지만 권장하지않는 어노테이션(Deprecated)가 붙어있음
Date now = new Date();
System.out.println(now.toString());
SimpleDateFormat sdf = new SimpleDateFormat("YY년 MM월 dd일 hh시 mm분");
String formatNow = sdf.format(now);
System.out.println(formatNow);
}
}
/*
[Calendar + TimeZone]
1) 날짜와 시간을 얻기위한 유틸리티
2) abstract 클래스 : 인스턴스 생성X, extends -> 구현 클래스 인스턴스 생성
- 국가, 문화, 지역마다 날짜, 시간 계산 방법이 다르기때문에 계산에 필요한 메서드, 필드만 선언되어있음 : abstract인 이유
- 하위 클래스에서 구현하도록 되어있음 : 특별한 역법 사용하지않는다면 getInstance로 Calendar 타입 인스턴스 얻을 수 있음
- getInstance 인자로 locale 지정해주면 특정 위치에 따른 시간, 포맷 설정 : Timezone 객체 사용
3) Date 와 Calendar 차이
- Date : 시스템의 시간 정보를 그대로 가져오는 목적이라면
- Calendar : 관련 값(상수 필드)을 가져와서 직접 구현
*/
import java.util.Calendar;
import java.util.TimeZone;
public class CalendarTest {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
//날짜 계산에 필요한 필드는 static final int로 선언
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
System.out.println(cal.get(Calendar.HOUR));
System.out.println(cal.get(Calendar.AM_PM)); // AM: 0, PM: 1
/* 요일마다 이벤트! */
int week = Calendar.DAY_OF_WEEK;
switch (week){
case Calendar.MONDAY:
break;
case Calendar.TUESDAY:
break;
case Calendar.WEDNESDAY:
break;
}
/* 시스템 변경 없이 : 사용 가능한 로케일 리스트 요청 */
String[] list = TimeZone.getAvailableIDs();
for(String element : list){
System.out.println(element);
}
//Date 인스턴스 얻는 getTime()을 쓰면 시스템 시간을 얻어옴
Calendar rome = Calendar.getInstance(TimeZone.getTimeZone("Europe/Rome"));
//System.out.println(rome.getTime()); (x)
System.out.println(rome.get(Calendar.HOUR));
}
}
2) java.text.Format
- abstract 클래스 : Format을 구현하는 각종 클래스 - 포맷팅과 관련한 객체타입
(1) DecimalFormat
(2) SimpleDateFormat
(3) MessageFormat
- 포맷팅 관련 인터페이스가 있다는 점을 알아두자
public class SimpleDateFormatTest {
public static void main(String[] args) {
/*
인스턴스 생성 시 포맷 패턴
1) y: 년
2) M: 월
3) d: 일
4) D: 일(365일)
5) E: 요일
6) a: 오전/오후
7) H: 시(24시간제)
8) h: 시(12시간제)
9) m: 분
10) s: 초
그 외 년의 몇번째 주, 월의 몇번째 주 등이 있음
*/
String[] pattern = {
"yy년 M월 d일 H시 m분",
"D번째 날"
};
SimpleDateFormat sdf = null;
Date now = null;
for(int i=0; i<pattern.length; i++){
sdf = new SimpleDateFormat(pattern[i]);
now = new Date();
System.out.println(sdf.format(now));
}
}
}
/*
- 문자열 형식 포맷팅하기
- 네트워크할 때는 json이지! : gson을 쓰자! 간단하게 json으로 포맷팅해준다! 역포맷팅도 된다!
- SQL문 작성할 때 편하겠음
*/
import java.text.MessageFormat;
public class MessageFormatTest {
public static void main(String[] args) {
String id = "1234";
String name = "박진형";
String txt = "회원 ID : {0} \n회원 이름 : {1}";
String msg = MessageFormat.format(txt, id, name);
System.out.println(msg);
}
}
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) {
/*
- 다양한 숫자 관련 포맷
1) 통화 기호 : 유니코드 + 단위 표현
*/
double num = 12345.67;
DecimalFormat df = null;
String[] pattern = {
"0", "0.0", "#,###",
"\u00A4 #,###"
};
for(int i=0; i<pattern.length; i++){
df = new DecimalFormat(pattern[i]);
System.out.println(df.format(num));
}
}
}
3) java.time : java8~
- 시간, 날짜 관련한 객체 타입 패키지
- 정보 얻기, 설정, 연산, 파싱 모두 모여있음
- java8부터 새롭게 생긴 API 패키지
/*
- 날짜와 시간과 관련해서 권장하지않는 방법을 대체하고 기능을 확장한 새로운 패키지
- 정보 얻기 + 세팅(변경) + 연산 + 파싱 모두 한 패키지 내에 있음 : 이전에는 각각 패키지에 있었던 것들을 모아놓음
- 파싱해서 타입 변환시킴 : 타입의 메서드 사용
(1) TimeFormat : http://docs.oracle.com/javase/8/docs/api/ DateTimeFormatter 참고
(2) 사용자 지정 포맷을 사용해도 됨
(3) 특정 타입으로 변환시키는 것은 특정 타입이 가지는 메서드를 사용하기위해서
(4) 특정 타입을 String으로 변환시킬 수 있음 : 포맷에 맞게
*/
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.TimeZone;
public class TimePkgTest {
public static void main(String[] args) {
/* LocalDate : 로컬 날짜 클래스 */
System.out.println(LocalDate.now().toString());
LocalDate targetDate = LocalDate.of(2017, 1, 1);
System.out.println(targetDate.toString());
LocalDate now = LocalDate.now();
System.out.println(now.getMonth());
System.out.println(now.minusMonths(1).getMonth());
//문자열을 파싱해서 LocalDate형으로 변환 : LocalDate의 메서드를 사용할 수 있음
System.out.println(LocalDate.parse("2017.09.09", DateTimeFormatter.ofPattern("yyyy.MM.dd")).toString());
/* LocalTime : 로컬 시간 클래스 */
LocalTime nowTime = LocalTime.now();
System.out.println(nowTime.toString());
System.out.println(nowTime.withHour(10)); // 특정 시로 변경
//String으로 변경 : 특정 포맷으로 포맷팅해서 변환
System.out.println(nowTime.format(DateTimeFormatter.ofPattern("HH시 mm분")));
/* LocalDateTime : 로컬 날짜 및 시간 관련 클래스 */
System.out.println(LocalDateTime.now().toString());
/* ZonedDateTime : 특정 타임존 날짜 및 시간 클래스, ZoneID로 정보를 얻어오는 클래스와 TimeZone 관련 클래스 함께 사용 */
String[] list = TimeZone.getAvailableIDs();
ZonedDateTime zdt = ZonedDateTime.now();
System.out.println("Zone ID : " + zdt.getZone());
System.out.println(ZonedDateTime.now(ZoneId.of(list[0])).toString());
/* Instant : 특정 시점의 타임스탬프 클래스, 두 시점 간에 우선순위를 따질 때 사용 */
Instant ts1 = Instant.now();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Instant ts2 = Instant.now(); //Instant형 인스턴스
if(ts1.isBefore(ts2)){
/* 앞일 떄 */
} else if(ts1.isAfter(ts2)){
/* 뒤일 때 */
} else {
/* 같을 떄 */
}
System.out.println(ts1.until(ts2, ChronoUnit.NANOS));
}
}
'java' 카테고리의 다른 글
[Java] 제네릭, 와일드카드 - 제네릭, 와일드카드는 깊게 알수록 복잡하다 (0) | 2017.10.28 |
---|---|
[Java] 쓰레드 - 쓰레드, 멀티쓰레드(우선순위, 쓰레드 그룹, 쓰레드풀) 등 (0) | 2017.10.25 |
[Java] 표준 API #4 - Arrays, Wrapper, Math, Random (0) | 2017.10.12 |
[Java] 표준 API #3 - String / StringBuffer, Builder / StringTokenizer, Pattern (0) | 2017.10.09 |
[Java] 표준 API #2 - System, Class + java.lang.reflect (0) | 2017.10.01 |
댓글