Obsidian/Recognition/Programing/Java/Java 날짜 관련.md

281 lines
9.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#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)); // 이상
// 시간 차이 연산
```