281 lines
9.3 KiB
Markdown
281 lines
9.3 KiB
Markdown
#Java
|
||
|
||
#### LocaDateTime
|
||
```java
|
||
|
||
/***********************************
|
||
LocalDate : 년월일
|
||
LocaTime : 시분초 + 나노초
|
||
LocalDateTime : 년월일시분초 + 나노초
|
||
************************************/
|
||
|
||
|
||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
||
LocalDateTime now = LocalDateTime.now(); // 현재시간
|
||
|
||
|
||
// 현재 일자 + 시각 가져오기
|
||
LocalDateTime now = LocalDateTime.now();
|
||
|
||
// String To LocalDateTime
|
||
LocalDateTime ldtStart = LocalDateTime.parse("2021-11-05 13:47:13.248", formatter);
|
||
|
||
// Number To LocalDateTime
|
||
LocalDateTime ldtEnd = LocalDateTime.of(2022, 11, 11, 0, 0, 0);
|
||
|
||
// LocalDateTime To String
|
||
String strEndDt = ldtEnd.format(formatter);
|
||
|
||
|
||
//두 시간 차이를 분으로 환산
|
||
Duration diff = Duration.between(ldtStart, ldtEnd);
|
||
long diffMin = diff.toMinutes();
|
||
|
||
// 두 날짜 차이(갯수)
|
||
long iDiff = ldtStart.until(ldfEnd, ChronoUnit.YEARL);
|
||
long iDiff = ldtStart.until(ldfEnd, ChronoUnit.MONTHS);
|
||
long iDiff = ldtStart.until(ldfEnd, ChronoUnit.DAYS);
|
||
|
||
// 일자, 시간 더하기
|
||
LocalDateTime threeYearsAfter = now.plusYears(3); // 3년 뒤 - now는 계속 현재시간
|
||
LocalDateTime twoDaysAgo = now.minusDays(2); // 2일 전
|
||
LocalDateTime twoDaysAndThreeHoursAgo = now.minusDays(2).minusHours(3); // 2일 3시간 전
|
||
|
||
|
||
/* 일자 변경 */
|
||
// now : 2024-08-13 16:58:16.198
|
||
|
||
// 년도 변경
|
||
LocalDate withYearResult = now.withYear(2000); // 2000-08-13
|
||
|
||
// 월 변경
|
||
LocalDate withMonthResult = now.withMonth(12); // 2024-12-13
|
||
|
||
// 일자 변경
|
||
LocalDate withDayOfMonthResult = now.withDayOfMonth(2); // 2024-08-02
|
||
|
||
//해당년도의 몇번째 일(day)로 설정 (범위: 1 ~ 366)
|
||
LocalDate withDayOfYearResult = now.withDayOfYear(2); // 2024-01-02
|
||
|
||
// 시간 변경(범위: 0 ~ 23)
|
||
LocalTime withHourResult = todayLocalTime.withHour(10); // 2024-08-13 10:58:16.198
|
||
|
||
// 분 변경(범위: 0 ~ 59)
|
||
LocalTime withMinuteResult = todayLocalTime.withMinute(45); //2024-08-13 16:45:16.198
|
||
|
||
// 초 변경(범위: 0 ~ 59)
|
||
LocalTime withSecondResult = todayLocalTime.withSecond(25); //2024-08-13 16:58:25.198
|
||
|
||
// 나노초 변경(범위: 0 ~ 999,999,999)
|
||
LocalTime withNanoResult = todayLocalTime.withNano(450000); //2024-08-13 16:58:16.000450
|
||
|
||
|
||
/* 형 변환 */
|
||
LocalDate date = LocalDate.of(2021, 1, 24);
|
||
LocalTime time = LocalTime.of(19, 30, 20);
|
||
|
||
// date, time으로 LocalDateTime 만들기
|
||
LocalDateTime datetime = LocalDateTime.of(date, time);
|
||
|
||
// LocalDateTime에 LocalTime 셋팅하기
|
||
LocalDateTime datetime = date.atTime(time);
|
||
LocalDateTime datetime = date.atTime(19, 30, 20);
|
||
|
||
// LocalDateTime에 LocalDate 셋팅하기
|
||
LocalDateTime datetime = time.atTime(date);
|
||
|
||
// LocalDateTime -> LocalDate로 변환
|
||
LocalDate localDate = now.toLocalDate();
|
||
|
||
// FileTime -> LocalDateTime 변환
|
||
// ※ Instant : 기계시간표현
|
||
LocalDateTime ldt = LocalDateTime.ofInstant( fileTime.toInstant(), ZoneId.systemDefault());
|
||
|
||
|
||
/* 일자 비교 */
|
||
LocalDate date1 = LocalDate.of(2021, 6, 19);
|
||
LocalDate date2 = LocalDate.of(2021, 6, 20);
|
||
|
||
// date1이 date2보다 이후인지 확인
|
||
date1.isAfter(date2) // false
|
||
|
||
// date1이 date2보다 이전인지 확인
|
||
date1.isBefore(date2) // true
|
||
|
||
// date1과 date2가 같은지 확인
|
||
date1.isEqual(date2) // false
|
||
|
||
// 두개 일자 차이 일수
|
||
int compare = date1.compareTo(date2); // -1
|
||
|
||
/* 일/시/분/초 단위별 갯수 연산 */
|
||
LocalDateTime date1 = LocalDateTime.of(2021, 6, 19, 1, 15, 0);
|
||
LocalDateTime date2 = LocalDateTime.of(2021, 6, 19, 4, 15, 30);
|
||
|
||
// 일자 단위 까지만 비교
|
||
LocalDateTime dayDate1 = date1.truncatedTo(ChronoUnit.DAYS);
|
||
LocalDateTime dayDate2 = date1.truncatedTo(ChronoUnit.DAYS);
|
||
|
||
// 시간 단위 까지만 비교
|
||
LocalDateTime dayDate1 = date1.truncatedTo(ChronoUnit.HOURS);
|
||
LocalDateTime dayDate2 = date1.truncatedTo(ChronoUnit.HOURS);
|
||
|
||
// 분 단위 까지만 비교
|
||
LocalDateTime dayDate1 = date1.truncatedTo(ChronoUnit.MINUTES);
|
||
LocalDateTime dayDate2 = date1.truncatedTo(ChronoUnit.MINUTES);
|
||
|
||
int compareResult = dayDate1.compareTo(dayDate2);
|
||
|
||
/*
|
||
※ truncatedTo() 메소드는
|
||
파라미터로 지정된 단위 이후의 값들을 버린 후, 복사한 LocalDateTime 객체를 리턴
|
||
*/
|
||
|
||
```
|
||
|
||
![[Pasted image 20240806134852.png]]
|
||
|
||
|
||
|
||
---
|
||
#### Calendar & Date
|
||
- 형변환
|
||
```java
|
||
|
||
// 1. Calendar To Date
|
||
|
||
Calendar calendar = Calendar.getInstance(); // 추상 클레스이므로 new로 생성 불
|
||
Date date = new Date(clendar.getTimeInMillis());
|
||
|
||
|
||
// 2. Date to Calendar
|
||
|
||
Date date = new Date();
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTime(date);
|
||
|
||
// 3. String to Date
|
||
|
||
SimpleDateFormat simple_format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
|
||
String timeString = "2021.07.14 23:39";
|
||
Date date = null;
|
||
|
||
try{
|
||
date = simple_format.parse(timeString);
|
||
} catch (ParseException e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
|
||
// 4. String to Calendar
|
||
// String -> Date -> 2번(Date to Calendar) 순
|
||
|
||
SimpleDateFormat simple_format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
|
||
String timeString = "2021.07.14 23:39";
|
||
Date date = null;
|
||
|
||
try{
|
||
date = simple_format.parse(timeString);
|
||
} catch (ParseException e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTime(date);
|
||
|
||
// Calendar to String
|
||
|
||
Date kstDate = new Date(cal.getTimeInMillis());
|
||
String strInTmKst = simple_format.format(kstDate);
|
||
|
||
```
|
||
|
||
- Calendar 일시 가공
|
||
```java
|
||
|
||
// 현재 시간에 연산
|
||
Calendar cal1 = Calendar.getInstance();
|
||
cal1.add(Calendar.DATE, 6); // 일 계산
|
||
cal1.add(Calendar.MONTH, 4); // 월 연산
|
||
cal1.add(Calendar.DATE, -3); // 빼고 싶다면 음수 입력
|
||
|
||
Date date = new Date(cal1.getTimeInMillis());
|
||
|
||
System.out.println("현재시간 : " + new Date());
|
||
System.out.println("연산시간 : " + date);
|
||
|
||
|
||
// 특정 시간에 연산
|
||
String date_str = "2021-03-01 11:11:11";
|
||
SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||
Date date = transFormat.parse(date_str);
|
||
|
||
Calendar cal1 = Calendar.getInstance();
|
||
cal1.setTime(date); // 시간 설정
|
||
cal1.add(Calendar.YEAR, 2); // 년 연산
|
||
cal1.add(Calendar.MONTH, 4); // 월 연산
|
||
cal1.add(Calendar.DATE, 4); // 일 연산
|
||
cal1.add(Calendar.HOUR_OF_DAY , 4); // 시간 연산
|
||
cal1.add(Calendar.MINUTE, 5); // 분 연산
|
||
cal1.add(Calendar.SECOND, 12); // 초 연산
|
||
|
||
System.out.println("설정시간 : " + date);
|
||
System.out.println("연산시간 : " + new Date(cal1.getTimeInMillis()));
|
||
|
||
// 서로 다른 2개의 시간 연산
|
||
String date_str1 = "2021-01-01 11:11:11";
|
||
String date_str2 = "2000-03-01 01:12:12";
|
||
SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||
Date date1 = transFormat.parse(date_str1);
|
||
Date date2 = transFormat.parse(date_str2);
|
||
|
||
Calendar cal1 = Calendar.getInstance();
|
||
Calendar cal2 = Calendar.getInstance();
|
||
// 시간 설정
|
||
cal1.setTime(date1);
|
||
cal2.setTime(date2);
|
||
// 날짜 연산
|
||
cal1.add(Calendar.MONTH , cal2.get(Calendar.MONTH) + 1); // 월 더하기 - get(Calendar.MONTH)의 결과값이 0~11 이기 때문에 1을 더한다
|
||
cal1.add(Calendar.DATE, cal2.get(Calendar.DATE)); // 일 더하기
|
||
cal1.add(Calendar.HOUR_OF_DAY, cal2.get(Calendar.HOUR_OF_DAY)); // 시간 더하기
|
||
|
||
System.out.println("date1 : " + date1);
|
||
System.out.println("date2 : " + date2);
|
||
System.out.println("연산시간 : " + new Date(cal1.getTimeInMillis()));
|
||
|
||
|
||
// Calendar 속성 값 참고
|
||
System.out.println("현재 시간을 얻은 후, 이 중에서 자신이 필요한 부분만 추출해야한다. \n");
|
||
System.out.println("1) 년도 YEAR : " + cal.get(Calendar.YEAR) + " 년");
|
||
System.out.println("2) 월 MONTH : " + (cal.get(Calendar.MONTH) + 1) + " 월 (★ 인덱스 상 0이 1월이기 때문에 +1을 해줘야함)");
|
||
System.out.println("3) 일 DATE : " + cal.get(Calendar.DATE) + " 일");
|
||
System.out.println("4) 올해 중 몇일째 DAY_OF_YEAR : " + cal.get(Calendar.DAY_OF_YEAR));
|
||
System.out.println("5) 이번 달 중 몇일째 DAY_OF_MONTH : " + cal.get(Calendar.DAY_OF_MONTH));
|
||
System.out.println("6) 이번 주 중 몇일째 DAY_OF_WEEK : " + cal.get(Calendar.DAY_OF_WEEK) + " (★한 주는 일요일부터 시작한다.)");
|
||
System.out.println("7) 이번 달 중, 몇번째 요일 DAY_OF_WEEK_IN_MONTH : " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
|
||
System.out.println();
|
||
System.out.println("8) 12시간 기준 시간(HOUR) : " + cal.get(Calendar.HOUR) + " 시");
|
||
System.out.println("9) 24시간 기준 시간 HOUR_OF_DAY : " + cal.get(Calendar.HOUR_OF_DAY) + " 시");
|
||
System.out.println("10) 오전, 오후 AM_PM : " + cal.get(Calendar.AM_PM) + " (오전은 0, 오후는 1 리턴)");
|
||
System.out.println("11) 분 MINUTE : " + cal.get(Calendar.MINUTE) + "분");
|
||
System.out.println("12) 초 SECOND : " + cal.get(Calendar.SECOND) + "초");
|
||
System.out.println();
|
||
System.out.println("이번 주 월요일? MONDAY : " + cal.get(Calendar.MONDAY));
|
||
System.out.println("이번 주 화요일? TUESDAY : " + cal.get(Calendar.TUESDAY)); // 이상
|
||
System.out.println("이번 주 수요일? WEDNESDAY : " + cal.get(Calendar.WEDNESDAY)); // 이상
|
||
System.out.println("이번 주 목요일? THURSDAY : " + cal.get(Calendar.THURSDAY));
|
||
System.out.println("이번 주 금요일? FRIDAY : " + cal.get(Calendar.FRIDAY)); // 이상
|
||
System.out.println("이번 주 토요일? SATURDAY : " + cal.get(Calendar.SATURDAY)); // 이상
|
||
System.out.println("이번 주 일요일? SUNDAY : " + cal.get(Calendar.SUNDAY)); // 이상
|
||
|
||
|
||
|
||
// 시간 차이 연산
|
||
|
||
|
||
|
||
|
||
```
|
||
|
||
|