sitelink1 | http://jinbroing.tistory.com/226 |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
[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)); } }