안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
날짜와 시간을 조작하기
날짜와 시간 클래스들은 날짜와 시간을 조작하는 메서드와 상대 날짜를 리턴하는 메서드들을 가지고 있습니다.
빼기와 더하기
아래 표는 날짜와 시간을 빼거나 더하는 메서드들입니다.
클래스 리턴타입 메서드(매개변수) 설명
minusYears(long) 년 빼기
minusMonths(long) 월 빼기
minusDays(long) 일 빼기
LocalDate LocalDate minusWeeks(long) 주 빼기
LocalDateTime LocalDateTime plusYears(long) 년 더하기
ZonedDateTime ZonedDateTime plusMonths(long) 월 더하기
plusDays(long) 일 더하기
plusWeeks(long) 주 더하기
----------------------------------------------------------------------------
minusHours(long) 시간 빼기
minusMinutes(long) 분 빼기
minusSeconds(long) 초 빼기
LocalTime LocalTime minusNanos(long) 나노초 빼기
LocalDateTime LocalDateTime plusHours(long) 시간 더하기
ZonedDateTime ZonedDateTime plusMinutes(long) 분 더하기
plusSeconds(long) 초 더하기
plusNanos(long) 나노초 더하기
각 메서드들은 수정된 LocalTime , LocalDateTime , ZonedDateTime을 리턴하기 때문에 도트(.)연산자로 연결해서 순차적으로 호출할 수 있습니다.
예제)
import java.time.LocalDateTime;
public class DateTimeOperationExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println("현재시: " + now);
LocalDateTime targetDateTime = now
.plusYears(1)
.minusMonths(2)
.plusDays(3)
.plusHours(4)
.minusMinutes(5)
.plusSeconds(6);
System.out.println("연산후: " + targetDateTime);
}
}
변경하기
날짜와 시간을 변경하는 메서드들
클래스 리턴타입 메서드(매개변수) 설명
withYear(int) 년 변경
LocalDate LocalDate withMonth(int) 월 변경
LocalDateTime LocalDateTime withDayOfMonth(int) 월의 일 변경
ZonedDateTime ZonedDateTime withDayOfYear(int) 년의 일 변경
with(TemporalAdjuster adjuster) 상대 변경
----------------------------------------------------------------------------
LocalTime LocalTime withHour(int) 시간 변경
LocalDateTime LocalDateTime withMinute(int) 분 변경
ZonedDateTime ZonedDateTime withSecond(int) 초 변경
withNano(int) 나노초 변경
with() 메서드는 현재 날짜를 기준으로 해의 첫 번째 일 또는 마지막 일, 달의 첫 번째 일 또는 마지막일, 지난 요일 및 돌아오는 요일 등 상대적인 날짜를 리턴합니다. 매개값은 TemporalAdjuster 타입으로 아래 표에 있는 TemporalAdjusters 에 있는 static 메서드를 호출하면 얻을 수 있습니다.
리턴타입 메서드(매개변수) 설명
firstDayOfYear() 이번 해의 첫 번째 일
lastDayOfYear() 이번 해의 마지막 일
firstDayOfNextYear() 다음 해의 첫 번째 일
firstDayOfMonth() 이번 달의 첫 번째 일
lastDayOfMonth() 이번 달의 마지막 일
TemporalAdjuster firstDayOfNextMonth() 다음 달의 첫 번째 일
firstInMonth(DayOfWeek dayOfWeek) 이번 달의 첫 번째 요일
lastInMonth(DayOfWeek dayOfWeek) 이번 달의 마지막 요일
next(DayOfWeek dayOfWeek) 돌아오는 요일
nextOrSame(DayOfWeek dayOfWeek) 돌아오는 요일(오늘 포함)
previous(DayOfWeek dayOfWeek) 지난 요일
previousOrSame(DayOfWeek dayOfWeek) 지난 요일(오늘 포함)
--------------------------------------------------------------------------
사용 예제)
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
public class DateTimeChangeExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println("현재: " + now);
LocalDateTime targetDateTime = null;
//직접 변경
targetDateTime = now
.withYear(2024)
.withMonth(10)
.withDayOfMonth(5)
.withHour(13)
.withMinute(30)
.withSecond(20);
System.out.println("직접 변경: " + targetDateTime);
//년도 상대 변경
targetDateTime = now.with(TemporalAdjusters.firstDayOfYear());
System.out.println("이번 해의 첫 일: " + targetDateTime);
targetDateTime = now.with(TemporalAdjusters.lastDayOfYear());
System.out.println("이번 해의 마지막 일: " + targetDateTime);
targetDateTime = now.with(TemporalAdjusters.firstDayOfNextYear());
System.out.println("다음 해의 첫 일: " + targetDateTime);
//월 상대 변경
targetDateTime = now.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("이번 달의 첫 일: " + targetDateTime);
targetDateTime = now.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("이번 달의 마지막 일: " + targetDateTime);
targetDateTime = now.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("다음 달의 첫 일: " + targetDateTime);
//요일 상대 변경
targetDateTime = now.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("이번 달의 첫 월요일: " + targetDateTime);
targetDateTime = now.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("돌아오는 월요일: " + targetDateTime);
targetDateTime = now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
System.out.println("지난 월요일: " + targetDateTime);
}
}
==================================================================================================================================
날짜와 시간을 비교하기
날짜와 시간 클래스들이 가족 있는 비교하거나 차이를 구하는 메서드들
클래스 리턴타입 메서드(매개변수) 설명
LocalDate isAfter(ChronoLocalDate other) 이후 날짜인지 비교
LocalDateTime boolean isBefore(ChronoLocalDate other) 이전 날짜인지 비교
isEqual(ChronoLocalDate other) 동일 날짜인지 비교
----------------------------------------------------------------------------
LocalDate boolean isAfter(LocalTime other) 이후 시간인지 비교
LocalDateTime isBefore(LocalTime other) 이전 시간인지 비교
----------------------------------------------------------------------------
LocalDate Period until(ChronoLocalDate endDateExclusive) 날짜 차이
----------------------------------------------------------------------------
LocalDate until(
LocalTime long Temporal endExclusive, 시간 차이
LocalDateTime TemporalUnit unit
)
----------------------------------------------------------------------------
between(
Period Period LocalDate startDateInclusive, 날짜 차이
LocalDate endDateExclusive
)
----------------------------------------------------------------------------
between(
Duration Duration Temporal startInclusive, 시간 차이
Temporal endExclusive
)
----------------------------------------------------------------------------
ChronoUnit.YEARS 전체 년 차이
ChronoUnit.MONTHS 전체 달 차이
ChronoUnit.WEEKS between( 전체 주 차이
ChronoUnit.DAYS Temporal temporal1Inclusive. 전체 일 차이
ChronoUnit.HOURS long Temporal temporal2Exclusive 전체 시간 차이
ChronoUnit.SECONDS ) 전체 초 차이
ChronoUnit.MILLS 전체 밀리초 차이
ChronoUnit.NANOS 전체 나노초 차이
------------------------------------------------------------------------------
Period는 년, 달, 일의 양을 /Duration은 시, 분, 초, 나노초의 양을 나타내느 클래스입니다.
이 클래스들은 D-day 나 D-time을 구할 때 사용할 수 있습니다.
아래는 Period 와 Duration 이 제공하는 메서드들입니다.
클래스 리턴타입 메서드(매개변수) 설명
int getYears() 년의 차이
Period int getMonths() 월의 차이
int getDays() 일의 차이
Duration int getSeconds() 초의 차이
int getNano() 나노초의 차이
------------------------------------------------------------------------------
그리고 Period 와 Duration의 between() 메서드는 년, 달, 일, 초의 단순 차이를 리턴하고,
ChronoUnit 열거타입의 between() 메서드는 전체 시간을 기준으로 차이를 리턴합니다.
예를 들어서 2015년 3월과 2016년 5월의 달의 차이를 구하려 할 때
Period의 between() 은 2가 되고 ChronoUnit의 between()은 14가 됩니다.
예제)
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.ChronoUnit;
public class DateTimeCompareExample {
public static void main(String[] args) {
LocalDateTime startDateTime = LocalDateTime.of(2023, 1, 1, 9, 0, 0);
System.out.println("시작일: " + startDateTime);
LocalDateTime endDateTime = LocalDateTime.of(2024, 3, 31, 18, 0, 0);
System.out.println("종료일: " + endDateTime + "\n");
//--------------------------------------------------------------
if(startDateTime.isBefore(endDateTime)) {
System.out.println("진행 중입니다." + "\n");
} else if(startDateTime.isEqual(endDateTime)) {
System.out.println("종료합니다." + "\n");
} else if(startDateTime.isAfter(endDateTime)) {
System.out.println("종료했습니다." + "\n");
}
//--------------------------------------------------------------
System.out.println("[종료까지 남은 시간]");
long remainYear = startDateTime.until(endDateTime, ChronoUnit.YEARS);
long remainMonth = startDateTime.until(endDateTime, ChronoUnit.MONTHS);
long remainDay = startDateTime.until(endDateTime, ChronoUnit.DAYS);
long remainHour = startDateTime.until(endDateTime, ChronoUnit.HOURS);
long remainMinute = startDateTime.until(endDateTime, ChronoUnit.MINUTES);
long remainSecond = startDateTime.until(endDateTime, ChronoUnit.SECONDS);
remainYear = ChronoUnit.YEARS.between(startDateTime, endDateTime);
remainMonth = ChronoUnit.MONTHS.between(startDateTime, endDateTime);
remainDay = ChronoUnit.DAYS.between(startDateTime, endDateTime);
remainHour = ChronoUnit.HOURS.between(startDateTime, endDateTime);
remainSecond = ChronoUnit.SECONDS.between(startDateTime, endDateTime);
System.out.println("남은 해: " + remainYear);
System.out.println("남은 달: " + remainMonth);
System.out.println("남은 일: " + remainDay);
System.out.println("남은 시간: " + remainHour);
System.out.println("남은 분: " + remainMinute);
System.out.println("남은 초: " + remainSecond + "\n");
//--------------------------------------------------------------
System.out.println("[종료까지 남은 기간]");
Period period = Period.between(startDateTime.toLocalDate(), endDateTime.toLocalDate());
System.out.print("남은 기간: " + period.getYears() + "년 ");
System.out.print(period.getMonths() + "달 ");
System.out.println(period.getDays() + "일\n");
//--------------------------------------------------------------
Duration duration =
Duration.between(startDateTime.toLocalTime(), endDateTime.toLocalTime());
System.out.println("남은 초: " + duration.getSeconds());
}
}