//자바 날짜 시간 자료형
1. Date 클래스 > JDK 1.0
2. Calendar 클래스 > JDK 1.1 > 가장 대중화
3. LocalDateTime, LocalDate, LocalTime 클래스 > JDK 1.8
* System.currentTimeMillis() -> 현재 시각 밀리초
//Date
- import java.util.Date;
- Date date = new Date();
package com.test.java;
import java.util.Date;
public class Ex28_DateTime {
public static void main(String[] args) {
m1();
} //main
private static void m1() {
// Date
Date date = new Date(); //현재 시각을 생성해서 date라는 변수에 담아라 > 현재 컴퓨터로부터
System.out.println(date);
} //m1
//Calendar
- import java.util.Calendar;
- Calendar c1 = Calendar.getInstance();
- 자바는 Calendar 상수를 제공함.
~ Calendar.YEAR
- 자바가 제공하는 상수를 이용하여 Date 추출
~ c1.get(Calendar.YEAR)
- 형식 문자를 이용하여 날짜, 시간, 요일을 간편하게 출력할 수 있음.
~ System.out.printf("%tF\n", c1); //2023-02-08
~ System.out.printf("%tT\n", c1); //09:22:17
~ System.out.printf("%tA\n", c1); //수요일
- 특정 시각 설정
1. 현재 시각 만들기
2. 원하는 시각으로 수정하기 (객체.set())
- 시각 연산 : 참조변수.add(field, value)
* value에 음수값을 넣으면 뺄셈
- 시간 연산 : 현재 시점 객체 참조변수.getTimeInMillis() - 특정 시점 객체 참조변수.getTimeInMillis()
~ 익숙한 초로 나타내려면 / 1000
~ 분으로 나타내려면 / 1000 / 60
~ 시로 나타내려면 / 1000 / 60 / 60
~ 일로 나타내려면 / 1000 / 60 / 60 / 24
- 시간 연산: int로 계산 ※받아올림 주의!
package com.test.java;
import java.util.Calendar;
public class Ex28_DateTime {
public static void main(String[] args) {
m2();
} //main
private static void m2() {
//Calendar
Calendar c1 = Calendar.getInstance();
System.out.println(c1);
System.out.println();
System.out.println(c1.get(Calendar.YEAR)); //년도
System.out.println(c1.get(Calendar.MONTH) + 1); //월(+1 해야 함)
System.out.println(c1.get(Calendar.DATE)); //일
System.out.println(c1.get(Calendar.HOUR)); //시(12H)
System.out.println(c1.get(Calendar.HOUR_OF_DAY)); // > 시(24H) > 회사에서는 대부분 이것 사용
System.out.println(c1.get(Calendar.MINUTE)); // 분
System.out.println(c1.get(Calendar.SECOND)); //초
System.out.println(c1.get(Calendar.MILLISECOND)); //밀리초(1/1000)
System.out.println(c1.get(Calendar.AM_PM)); //오전(0), 오후(1)
System.out.println(c1.get(Calendar.DAY_OF_YEAR)); // 올해 중 며칠째?
System.out.println(c1.get(Calendar.DAY_OF_MONTH)); // 이번 달 중 며칠째?
System.out.println(c1.get(Calendar.DAY_OF_WEEK)); // 요일 > 일(1) ~ 토(7)
System.out.println(c1.get(Calendar.WEEK_OF_YEAR)); // 올해 들어 몇 주 차인지?
System.out.println(c1.get(Calendar.WEEK_OF_MONTH)); // 이번 달의 몇 주 차인지?
// > 한 달의 마지막 주가 목요일을 포함하고 있지 않다면 다음 달의 첫째 주로 센다.
System.out.println();
System.out.printf("오늘은 %d년 %d월 %d일입니다.\n"
, c1.get(Calendar.YEAR)
, c1.get(Calendar.MONTH) + 1
, c1.get(Calendar.DATE));
System.out.printf("오늘은 %d년 %02d월 %02d일입니다.\n"
, c1.get(Calendar.YEAR)
, c1.get(Calendar.MONTH) + 1
, c1.get(Calendar.DATE));
System.out.println();
//요구사항] "지금은 14시 12분 53초입니다." //24H
System.out.printf("지금은 %02d시 %02d분 %02d초입니다.\n"
, c1.get(Calendar.HOUR_OF_DAY)
, c1.get(Calendar.MINUTE)
, c1.get(Calendar.SECOND));
//요구사항] "지금은 오후 2시 12분 53초입니다." //12H
System.out.printf("지금은 %s %02d시 %02d분 %02d초입니다.\n"
, c1.get(Calendar.AM_PM) == 0 ? "오전" : "오후"
, c1.get(Calendar.HOUR)
, c1.get(Calendar.MINUTE)
, c1.get(Calendar.SECOND));
//요구사항] 2023-02-08 > printf()
System.out.printf("%tF\n", c1);
//요구사항] 09:22:17 > printf()
System.out.printf("%tT\n", c1);
//요구사항] 수요일 > printf()
System.out.printf("%tA\n", c1);
}
}
- set
package com.test.java;
import java.util.Calendar;
public class Ex28_DateTime {
public static void main(String[] args) {
m3();
} //main
private static void m3() {
//현재 시각 만들기
Calendar now = Calendar.getInstance();
//특정 시각 만들기 > 원하는 날짜(2023-07-12)
//1. 현재 시각 만들기
//2. 원하는 시각으로 수정하기
Calendar endDate = Calendar.getInstance();
endDate.set(Calendar.MONTH, 6);
endDate.set(Calendar.DATE, 12);
endDate.set(Calendar.HOUR_OF_DAY, 18);
endDate.set(Calendar.MINUTE, 0);
endDate.set(Calendar.SECOND, 0);
System.out.printf("%tF %tT %tA\n", endDate, endDate, endDate);
Calendar birthday = Calendar.getInstance();
birthday.set(1998, 0, 17);
System.out.printf("%tF %tA\n", birthday, birthday);
} //m3
}
- add()
package com.test.java;
import java.util.Calendar;
public class Ex28_DateTime {
public static void main(String[] args) {
m4();
} //main
private static void m4() {
// 연산
Calendar now = Calendar.getInstance();
System.out.printf("1일차: %tF\n", now);
now.add(Calendar.DATE, 100); //수정 > now는 더이상 현재 시각x
System.out.printf("100일 후: %tF\n", now);
//현재 시점으로부터 100일전?
now = Calendar.getInstance();
now.add(Calendar.DATE, -100);
System.out.printf("100일 전: %tF\n", now);
//3시간 17분 뒤 영양제 복용
now = Calendar.getInstance();
now.add(Calendar.HOUR, 3);
now.add(Calendar.MINUTE, 17);
System.out.printf("영양제 복용 시각은: %tT\n", now);
// 백일 잔치는 언제?
Calendar birthday = Calendar.getInstance();
birthday.set(1998, 0, 17);
birthday.add(Calendar.DATE, 100);
System.out.printf("나의 100일 잔치는 언제?: %tF\n", birthday);
} //m4
}
- getTimeInMillis()
package com.test.java;
import java.util.Calendar;
public class Ex28_DateTime {
public static void main(String[] args) {
m5();
} //main
private static void m5() {
// 내가 태어난 시간부터 지금까지 얼마나 지났는지 계산
Calendar birthday = Calendar.getInstance();
birthday.set(1998, 01, 17, 04, 59, 00); //태어난 시간
Calendar now = Calendar.getInstance(); //현재 시간
System.out.println( (now.getTimeInMillis() - birthday.getTimeInMillis())
/ 1000 / 60 / 60 / 24 ); // 초 / 분 / 시 / 일
//크리스마스까지 며칠 남았는지?
Calendar christmas = Calendar.getInstance();
christmas.set(2023, 12, 25);
long span = christmas.getTimeInMillis() - now.getTimeInMillis();
System.out.printf("올해 크리스마스까지 %d일 남았습니다.\n", span / 1000 / 60 / 60 / 24);
} //m5
}
- 시간 계산
package com.test.java;
import java.util.Calendar;
public class Ex28_DateTime {
public static void main(String[] args) {
m6();
} //main
private static void m6() {
// 시간 연산
//2시간 30분 + 10분
int hour = 2;
int min = 30;
min += 10;
System.out.printf("%d시간 %d분\n", hour, min);
//2시간 30분 + 40분
hour = 2;
min = 30;
min += 40;
hour += min / 60;
min = min % 60;
System.out.printf("%d시간 %d분\n", hour, min);
}
}
// LocalDate, LocalDateTime, LocalTime
- LocalDate : 날짜 값
~ 2023년 2월 6일
- LocalDateTime : 날짜 + 시간 값
~ 2023년 2월 6일 0:29am
- LocalTime : 시간 값
~ 00:29
~ 0:29am
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Local {
public static void main(String[] args) {
LocalDateTime nowDateTime = LocalDateTime.now() ;
System.out.println("date & time = " + nowDateTime);
LocalDate nowDate = LocalDate.now();
System.out.println("date = " + nowDate);
LocalTime nowTime = LocalTime.now();
System.out.println("time = " + nowTime);
}
}
//LocalDate 메서드
*LocalDate nowDate = LocalDate.now()
- nowDate.getYear() : 현재 시점의 년도 반환
- nowDate.getDayOfWeek() : 현재 시점의 요일 반환
- nowDate.getDayOfMonth() : 현재 시점의 날짜 반환
- nowDate.getDayOfYear() : 현재 시점이 1년 중 몇 번째의 날인지 반환
- nowDate.getMonth() : 현재 시점의 달을 문자로 반환
- nowDate.getMonthValue() : 현재 시점의 달을 숫자로 반환
- nowDate.isLeapYear() : 현재 시점의 년도가 윤년인지 확인하여 boolean 값을 반환
- nowDate.lengthOfMonth() : 현재 시점의 한 달이 총 며칠인지 반환
- nowDate.lengthOfYear() : 현재 시점의 1년이 총 며칠인지 반환
- nowDate.plusDays(num) : 현재 시점으로부터 num일 후 년-월-일 반환
- nowDate.plusMonths(num) : 현재 시점으로부터 num달 후 년-월-일 반환
- nowDate.plusYears(num) : 현재 시점으로부터 num년 후 년-월-일 반환
- nowDate.minusYears(num) : 현재 시점으로부터 num년 전 년-월-일 반환
- nowDate.withYear(year) : 현재 시점에서 연도만 변경하여 년-월-일 반환
- nowDate.withDayOfMonth(date) : 현재 시점에서 날짜만 변경하여 년-월-일 반환
- nowDate.withMonth(month) : 현재 시점에서 달만 변경하여 년-월-일 반환
*LocalDate birth = LocalDate.of(year,month,date) : 특정 년-월-일 지정 가능
- nowDate.isBefore(birth) : 오늘 날짜가 birth 이전인지 확인하여 boolean 값을 반환
- nowDate.isAfter(birth) : 오늘 날짜가 birth 이후인지 확인하여 boolean 값을 반환
※LocalDateTime 도 유사한 메서드들을 가지고 있고, 여기에 추가로 몇 가지를 더 가지고 있다.
- plusHours(), plusMinutes(), plusSeconds
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Local {
public static void main(String[] args) {
LocalDateTime nowDateTime = LocalDateTime.now() ;
System.out.println("date & time = " + nowDateTime);
LocalTime nowTime = LocalTime.now();
System.out.println("time = " + nowTime);
LocalDate nowDate = LocalDate.now();
System.out.println("date = " + nowDate);
System.out.println("올해는 = " + nowDate.getYear());
System.out.println("오늘의 요일은 = " + nowDate.getDayOfWeek());
System.out.println("오늘의 날짜는 = " + nowDate.getDayOfMonth());
System.out.println("오늘은 1년 중 몇 번째 날인가요? = " + nowDate.getDayOfYear());
System.out.println("이번 달은 = " + nowDate.getMonth());
System.out.println("이번 달은 = " + nowDate.getMonthValue());
System.out.println("이번 연도는 윤년인가요? = " + nowDate.isLeapYear());
System.out.println("이번 달은 총 며칠인가요? = " + nowDate.lengthOfMonth());
System.out.println("이번 연도는 총 며칠인가요? = " + nowDate.lengthOfYear());
System.out.println("오늘로부터 100일 후의 날짜는 ? = " + nowDate.plusDays(100));
System.out.println("오늘로부터 3달 후의 날짜는? = " + nowDate.plusMonths(3));
System.out.println("오늘로부터 10년 후의 날짜는? = " + nowDate.plusYears(10));
System.out.println("오늘로부터 10년 전의 날짜는? = " + nowDate.minusYears(10));
System.out.println("연도만 작년으로 바꾼다면? = " + nowDate.withYear(2022));
System.out.println("날짜만 10일로 바꾼다면? = " + nowDate.withDayOfMonth(10));
System.out.println("달만 1월로 바꾼다면? = " + nowDate.withMonth(1));
System.out.println("올해의 100일째 되는 날은? = " + nowDate.withDayOfYear(100));
System.out.println();
LocalDate birth = LocalDate.of(1998,01,17);
System.out.println("태어난 날 = " + birth );
System.out.println();
System.out.println("오늘 날짜는 태어난 날 이전인가요? = " + nowDate.isBefore(birth));
System.out.println("오늘 날짜는 태어난 날 이후인가요? = " + nowDate.isAfter(birth));
}
}
'자바(JAVA)' 카테고리의 다른 글
[자바(Java)] 디버그(debug) (0) | 2023.02.09 |
---|---|
[자바(Java)] 연산자 (0) | 2023.02.06 |
[자바(Java)] 에러(Error) (0) | 2023.02.03 |
[자바(Java)] 파일과 디렉토리 (0) | 2023.01.24 |
☆이클립스 개인 설정 (0) | 2023.01.14 |