contents
chapter10
5.java.util.Scanner
6.BigDecimal
7.Wrapper
8.Timer/TimerTask
9.formatting
1)DecimalFormat
2)SimpleDateFormat
10.Object 클래스
11.java.time 패키지
1)java.time 패키지의 하위 패키지
2)time 패키지의 신간과 날짜 클래스 종류
3)클래스들의 정보 값 읽어오기
4)클래스들의 정보 더하기/빼기
5)클래스들의 정보 값 변경하기
6)클래스들의 정보 값 비교하기
-------------------------------------------------------------------------------
chapter10
5.java.util.Scanner
-Scanner 클래스는 입력을 도와주는 클래스임
-Scanner 클래스는 문자 데이터를 읽어오는데 도움을 주는 클래스 임. 다양한 소스로부터 데이터를 읽어 올 수 있음
Scanner(File file)
Scanner(InputStream source)
Scanner(String source)
Scanner(Readable source)
-Scanner 클래스 덕분에 JAVA는 화면으로 입력받는 것이 상당히 편리해 짐
-Scanner 인스턴스를 생성하고 nextLine( ) 메서드를 사용하여 입력값을 변수에 저장함. 변수의 이름을 활용해서 환영 문구를 출력함
Scanner sc = new Scanner(System.in); String input = sc.nextLine( ); //문자열을 입력받을 땐 nextLine( ) |
-만약 입력받을 값이 문자열이 아니라 정수라면 nextInt( ), boolean 값이라면 nextBoolean( )과 같이 next 뒤에 자료형을 붙인 메서드명을 사용함
byte nextByte( ); short nextShort( ); long nextLong( ); |
package ch10;
import java.io.FileInputStream; import java.util.Scanner; public class exam76 { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("sample.txt"); Scanner s = new Scanner(fis); while(s.hasNext()) {//값이 존재 하면 계속해서 반복 System.out.println(s.nextLine()); } } catch (Exception e) { e.printStackTrace(); } } } |
sample.txt
안녕 ㄴㄴㄴㄴ ㄱㄱㄱㄱ |
실행 결과
안녕
ㄴㄴㄴㄴ ㄱㄱㄱㄱ |
-파일로부터 입력받는 프로그램임. FileInptStream 클래스를 통해 파일을 처리하고 이를 Scanner 클래스를 통해 입력을 받음. 그리고 반복문을 통해 text 파일의 내용을 한 줄씩 출력함
*참조변수 = null; -> 초기값 선언해주는 것이 좋음
확장자표시방법: 파일: 보기 선택 -> 파일확장명 체크
6.BigDecimal
-정확한 소수점 연산을 해야 할 때는 BigDecimal 클래스를 사용함. double과 long으로 소수점 연산을 할 때 오차가 나는 부분을 보완함
7.Wrapper
-wrapper 클래스는 기본 자료형들을 객체로 다루는 데 사용함
-wrap(싸다, 포장하다)라는 단어에서 알 수 있듯이 래퍼(Wrapper) 클래스는 기본 지료형을 객체자료형으로 포장하는 클래스임. 객체지향언어인 자바에서 객체로 다루어지지 않는 기본 자료형들을 객체로 다루기 위해 도입한 클래스임
-모든 기본 자료형은 각각 자료형에 해당하는 래퍼 클래스가 있음
기본 자료형 | Wrapper 클래스 |
boolean | Boolean 클래스 |
char | Character 클래스 |
byte | Byte 클래스 |
short | Short 클래스 |
int | Integer 클래스 |
long | Long 클래스 |
double | Double 클래스 |
float | Float 클래스 |
-기본 자료형과는 다르게 래퍼 클래스는 클래스이므로 인스턴스를 생성해서 사용함
Integer i = new Integer(100); Double d = new Double(3.14); |
-래퍼 클래스의 메서드들을 활용하면 다른 자료형으로 변환하기가 편리함
◎래퍼 클래스 -> 기본 자료형
-자료형 이름 + Value( )의 메서드를 사용하면 기본 자료형으로 변경함
Integer i = new Integer(100); int a = i.intValue( ); //int형으로 변환 double b = i.doubleValue( ); //double형으로 변환 |
◎문자열 - > 숫자
int a = Integer.parseInt("100"); //문자 100이 int형 100으로 변환 double b = Double.parseDouble("3.14"); |
◎숫자 -> 문자열
int number = 36; String s = Integer.toString(number); System.out.println(s+36); //3636으로 출력 됨 |
◎ 문자열 -> 래퍼 클래스
Integer i = Integer.valueOf("100"); Float f = Float.valueOf("2.65"); |
-래퍼 클래스는 Immutable(변하지 않는)한 성격을 지님. 즉 연산할 때마다 새로운 객체가 만들어짐
-오토박싱은 JDK 1.5버전 이상부터 도입된 개념으로 기본 자료형을 자동으로 객체자료형으로 변환시켜주는 것을 말함
Integer i = 100; //오토박싱 Integer i = new Integer(100); |
-언박싱은 반대로 객체자료형을 자동으로 기본 자료형으로 변환시켜주는 것을 말함
Integer i = new Integer(100); int a = 3; a = a + 1; //언박싱 a = a + i.intValue( ); //생략 가능 |
8.Timer/TimerTask
-Timer/TimerTask 클래스는 개발자가 원하는 특정한 시간에 코드를 실행하거나 특정 시간 간격으로 반복되는 작업을 할 수 있게 해줌
-사용하는 방법은 먼저 TimerTask를 상속받는 새로운 클래스를 선언해야 함. 그리고 TimerTask 클래스의 run 추상 클래스를 자신이 하고 싶은 작업으로 오버라이딩 함
Class Work1 extends TimerTask{ //run 추상 메서드 오버라이딩 public void run( ) { System.out.println("work1 실행"); //무엇을 정의 } } |
-그리고 Timer 객체를 생성하고 원하는 시간을 파라미터로 작성함
Timer t = new Timer(true); TimerTask w1 = new Work1( ); t.schedule(w1, 5000); //5초 뒤에 실행 //언제 정의 |
- Timer 객체를 생성할 때 생성자의 파라미터로 true를 쓰는 것은 프로그램이 종료될 때 객체가 사라지는 것을 의미함. true를 쓰지 않으면 프로그램이 종료되었는데도 Timer 객체가 남아있기 때문에 true를 작성하는 것이 좋음
package ch10; import java.util.Timer; import java.util.TimerTask; class Work1 extends TimerTask { @Override public void run() { System.out.println("work1 실행"); } } class Work2 extends TimerTask { @Override public void run() { System.out.println("work2 실행"); } } public class exam78 { public static void main(String[] args) throws InterruptedException{ Timer t = new Timer(true); // 시간 객체 TimerTask w1 = new Work1(); // 무엇을 객체 TimerTask w2 = new Work2(); // 무엇을 객체 t.schedule(w1, 3000); // 3초 뒤 실행 t.schedule(w2, 1000); // 1초 뒤 실행 Thread.sleep(4000); // 종료하지 않고 스레드 기다리기 System.out.println("모든 작업 종료"); } } |
실행 결과
work2 실행
work1 실행 모든 작업 종료 |
-TimerTask 클래스를 상속받는 Work1, Work2 인스턴스를 각각 생성함. 마찬가지로 Timer 객체도 생성한 다음 schedule 메서드를 이용해서 시간을 설정함. w1을 3초 뒤에 실행하라는 의미이고 w2를 1초 뒤에 실행하라는 의미임. 코드는 원하는 작업이 실행되기까지 기다리는 동안 프로그램이 다 종료되어버릴 수 있기 때문에 총 4초를 기다리는 것을 의미함. 실제 실행결과를 보면 프로그램이 실행되고 1초 뒤에 실행되는 w2가 먼저 실행되고 이어서 3초에 w1이 실행, 그리고 스레드가 기다리는 것을 완료한 4초에서 프로그램이 종료됨
9.formatting
-데이터를 볼 때 일정한 형식으로 통일되어 있는 것이 보기가 편함. 이런한 형식을 지정해 주는 것이 Format 클래스임
1)DecimalFormat
-DecimalFormat 클래스는 숫자를 형식화하는 클래스임. 많은 데이터를 사용하거나 읽어올 때 일정한 형식 없이 제각각의 형식으로 나열되어 있다면 상당히 불편할 것임. DecimalFormat 클래스를 통해 그러한 불편함을 감소시키고 원하는 패턴을 지정하여 값을 표현함
기호 | 의미 | 기호 | 의미 |
# | 있으면 출력 | , | 콤마를 넣음 |
0 | 없어도 0으로 채움 | E | 지수 기호 |
. | 소수점 | % | 퍼센트 |
- | 음수 기호를 붙임 |
-DecimalFormat를 사용하려면 먼저 패턴을 정의해야 함. 그리고 그 패턴을 이용해서 DecimalFormat 인스턴스를 생성하고난 다음 format 메서드를 호출해서 문자열을 반환함
package ch10;
import java.text.DecimalFormat; public class exam79 { public static void main(String[] args) { String [] pattern = { //패턴의 배열 "###.###", "000.000", "-###.###", "000000.00%"}; double[]arr = {1.3, 3.33, 124.243, 242}; //아직 형식화되지 않는 수들의 배열 for(int p = 0; p< pattern.length; p++) { //패턴마다 반복 DecimalFormat d = new DecimalFormat(pattern[p]); System.out.println("<<<<<" + pattern[p] + ">>>>>"); for(int i = 0; i < arr.length; i++) { System.out.println(d.format(arr[i])); } } } } |
실행 결과
<<<<<###.###>>>>>
1.3 3.33 124.243 242 <<<<<000.000>>>>> 001.300 003.330 124.243 242.000 <<<<<-###.###>>>>> -1.3 -3.33 -124.243 -242 <<<<<000000.00%>>>>> 000130.00% 000333.00% 012424.30% 024200.00% |
2)SimpleDateFormat
-SimpleDateFormat은 날짜를 형식화 하는 클래스임. Date와 Calendar에 있는 출력형식 외에 원하는 형태로 출력하기 위한 클래스임. 예를 들면 한국에서는 년, 월, 일 순으로 보는 것이 익숙하다면, 다른 나라에서는 월, 일, 년 순으로 보는 것이 익숙할 수도 있기 때문임
기호 | 의미 | 기호 | 의미 |
y | 년 | a | 오전/오후 |
M | 월 | H | 시간 |
d | 일 | m | 분 |
E | 요일 | s | 초 |
-SimpleDateFormat 클래스를 사용하려면 원하는 패턴을 파라미터로 인스턴스를 생성한 후, format 메서드를 사용함
package ch10; import java.text.SimpleDateFormat; import java.util.Date; public class exam80 { public static void main(String[] args) { Date day = new Date(); String patternKorea = "yyyy년-MM월-dd일"; String patternUSA = "MM-dd-yyyy"; String patternUK = "dd-MM-yyyy"; String pattern1 = "E요일 HH시 mm분 ss초"; SimpleDateFormat p1 = new SimpleDateFormat(patternKorea); SimpleDateFormat p2 = new SimpleDateFormat(patternUSA); SimpleDateFormat p3 = new SimpleDateFormat(patternUK); SimpleDateFormat p4 = new SimpleDateFormat(pattern1); System.out.println("현재 날짜 " + day); System.out.println("한국 형식(년,월,일): " + p1.format(day)); System.out.println("미국 형식(월,일,년): " + p2.format(day)); System.out.println("영국 형식(일,월,년): " + p3.format(day)); System.out.println(p4.format(day)); } } |
실행 결과
현재 날짜 Sat Jan 25 20:04:36 KST 2025
한국 형식(년,월,일): 2025년-01월-25일 미국 형식(월,일,년): 01-25-2025 영국 형식(일,월,년): 25-01-2025 토요일 20시 04분 36초 |
10.Object 클래스
-Object 클래스는 모든 클래스의 조상 클래스임. 즉 자바의 모든 클래스는 Object 클래스를 상속받았으며 Object 클래스의 멤버를 사용함
-Object 클래스에는 멤버 변수는 없으며 11개의 메서드가 있음
Modifiter and Type | 메서드 | 설명 |
protected Object | clone() | 객체의 복사본을 반환함 |
boolean | equlas(Object obj) | obj와 같은 객체인지 아닌지 boolean 값으로 반환함 |
protected void | finalize() | 객체가 소멸할 때 호출됨 |
Class<?> | getClass() | 클래스의 정보를 담고 있는 'Class'객체를 반환함 |
int | hashCode() | 해시 코드를 반환함 |
void | notify() | 대기 중인 하나의 스레드를 깨움 |
void | notifyAll() | 대기 중인 모든 스레드를 깨움 |
String | toString() | 객체의 정보를 문자열로 반환함 |
void | wait() | 현재의 스레드를 멈추고 대기함 |
void | wait(long timeout) | timeout 만큼 스레드를 멈추고 대기함 |
void | wait(long timeout, int nanos) | 실제로 일어난 시간만큼 스레드를 멈추고 대기함 |
-자손 클래스들은 Object 클래스의 메서드를 그냥 사용할 수도 있지만 보통은 자신에게 맞게 오버라이딩하여 사용함
1)clone()
-clone() 메서드는 인스턴스를 복사할 때 사용됨. 자신과 똑같은 인스턴스를 생성할 때 사용함
2)equlas(Object obj)
-equlas() 메서드는 객체의 참조변수를 비교하여 같은지 다른지 boolean 값으로 반환하는 메서드임
3)getClass()
-getClass() 메서드는 해당 객체의 클래스 정보를 전달하는 메서드임
4)hashCode()
-hashCode() 메서드는 객체의 해시 코드 값을 반환하는 메서드임. 해시 코드란 해시함수(Hash Function)를 통해 반환되는 객체가 저장된 위치 값임. 즉 서로 다른 객체는 서로 다른 해시 코드 값을 가짐
5)toString()
-toString() 메서드는 객체에 대한 기본적인 정보를 문자열로 반환함. Object 클래스에 정의된 toString 메서드는 클래스의 정보와 해시 코드를 반환함
11.java.time 패키지
-java.time 패키지는 자바에서 날짜와 시간을 다루기 위한 패키지임
1)java.time 패키지의 하위 패키지
-java.time 패키지는 JDK 1.8부터 추가된 패키지로서 기존의 Date와 Calendar를 보완함. 기존의 Date와 Calendar의 한계를 보완하며 편리하게 시간과 날짜를 표현함. java.time 패키지는 다음과 같이 4개의 하위 패키지가 있음
패키지 | 설명 |
java.time | 날짜와 시간을 나타내는 LocalDate, LocalTime 등을 포함한 패키지 |
java.time.format | 날짜와 시간을 파싱하고 포맷팅하는 API 포함 |
java.time.chrono | 여러 가지 달력 시스템을 사용할 수 있는 API 포함 |
java.time.temporal | 날짜와 시간을 연산하기 위한 API 포함 |
java.time.zone | 타임존을 지원하는 API 포함 |
-java.time 패키지에서는 날짜와 시간을 변경할 수가 있음. 다만 여기서 주의할 점은 클래스들은 immutable(불변한) 속성이 있기 때문에 날짜나 시간을 변경하게 되면 실제로는 변경하는 것이 아니라 새로운 객체를 반환함
2)time 패키지의 신간과 날짜 클래스 종류
◎LocalDate 클래스
-LocalDate 클래스에는 날짜 정보를 저장함. LocalDate 클래스에 날짜 정보를 저장하는 방법은 현재 날짜를 지정하는 now() 메서드를 쓰는 방법과 특정 날짜를 지정하는 of() 메서드를 사용하는 방법이 있음
LocalDate ld = LocalDate.now(); LocalDate mld = LocalDate.of(int year, int month, int dayOfMonth); |
◎LocalTime 클래스
-LocalTime 클래스에는 시간 정보를 저장함. LocalTime 클래스에 시간정보를 저장하는 방법은 현재 시간을 지정하는 now() 메서드를 쓰는 방법과, 특정 시간을 지정하는 of() 메서드를 사용하는방법이 있음
LocalTime lt = LocalTime.now(); LocalTime mlt = LocalTime.of(int hour, int minute, int second, int nonoOfsecond); |
-of() 메서드의 경우에는 파라미터의 개수나 종류에 따라 다양하게 사용함
of(int hour, int minute); of(int hour, int minute, int second); of(int hour, int minute, int second, int nanoOfSecond); |
◎LocalDateTime 클래스
-LocalDateTime 클래스는 LocalDate 클래스와 LocalTime 클래스를 결합한 클래스임. 날짜 정보와 시간 정보 모두 저장함. LocalDateTime 클래스에 날짜와 시간정보를 저정하는 방법은 현재 날짜와 시간정보를 지정하는 now() 메서드를 쓰는 방법과, 특정 날짜와 시간 정보를 지정하는 of() 메서드를 사용하는 방법이 있음
LocalDateTime ldt = LocalDateTime.now(); LocalDateTime mldt = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nonoOfsecond); |
◎ZonedDateTime 클래스
-ZonedDateTime 클래스는 ISO-8601 달력 시스템에서 정의하는 TimeZone에 따라 날짜와 시간을 저장하는 클래스임
2025-01-25T20:55:45.074985800+09:00[Asia/Seoul] |
-위와 같은 형식으로 정보를 저장하며 뒤에 협정세계시(UTC)와 차이나는 시간(존 오프셋)이 따로 저장됨. ZonedDateTime 클래스는 now() 메서드 뒤에 ZoneId를 매개 값으로 넘겨야 함
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("UTC")); |
◎Instant
-Instant는 특정 시점의 타임스탬프 객체임. 1970년 1월 1일부터 현재까지의 시간을 세는 객체이며 사람이 사용하기보다는 Machine time에 유리함
Instant i1 = Instant.now(); |
3)클래스들의 정보 값 읽어오기
◎LocalDate/LocalTime
-LocalDate과 LocalTime 클래스의 날짜와 시간정보는 아래의 메서드를 통해 이용함. 주의할 점은 Calendar 클래스에서 요일을 [일요일 = 1, 월요일 = 2, ... 토요일 = 7] 로 표현하고 월은 1월을 0으로 표현했던 것과 달리 [월요일 = 1, 화요일 = 2, ... 일요일 = 7] 로 표현하며 1월은 1이 됨
클래스 | 리턴타입 | 메서드 | 설명 |
LoclaDate | int | getYear() | 년도 |
Month | getMonth() | Month의 열거값 | |
int | getMonthValue() | 월 | |
int | getDayOfYear() | 1년의 몇 번째 일 | |
int | getDayOfMonth() | 월의 몇 번째 일 | |
DayOfWeek | getDayOfWeek() | 요일 | |
boolean | isLeapYear() | 윤년 여부 | |
LocalTime | int | getHour() | 시간 |
int | getMinute() | 분 | |
int | getSecond() | 초 | |
int | getNano() | 나노초 |
-LocalDateTime은 날짜와 시간 정보를 모두 가지고 있기 때문에 위의 메서드들을 대부분 가지고 있음. 다만 isLeapYear() 메서드를 사용하기 위해서는 toLocalDate()으로 LocalDate 클래스로 변환한 다음 사용함
4)클래스들의 정보 더하기/빼기
-각 클래스는 필드의 값을 변경하기 위한 메서드들을 가지고 있음. LocalDate 클래스, LocalDateTime 클래스, ZonedDateTime 클래스 등에서는 필드 값을 변경하기 위해 다음과 같은 메서드를 이용함
메서드 | 설명 | 메서드 | 설명 |
minusYears(long) | 년도 빼기 | plusYears(long) | 년도 더하기 |
minusMonths(long) | 월 빼기 | plusMonths(long) | 월 더하기 |
minusDays(long) | 일 빼기 | plusDays(long) | 일 더하기 |
minusWeeks(long) | 주 빼기 | plusWeeks(long) | 주 더하기 |
minusHours(long) | 시간 빼기 | plusHours(long) | 시간 더하기 |
minusMinutes(long) | 분 빼기 | plusMinutes(long) | 분 더하기 |
minusSeconds(long) | 초 빼기 | plusSeconds(long) | 초 더하기 |
minusNanos(long) | 나노초 빼기 | plusNanos(long) | 나노초 더하기 |
<날짜를 더하고 빼는 메서드를 확인한 코드>
package ch10;
import java.time.*; public class exam81 { public static void main(String[] args) { LocalDate ld = LocalDate.now(); System.out.println(ld); LocalDate ld2 = ld .minusYears(2) .plusMonths(3) .minusDays(4); System.out.println(ld2); //자동 변환 LocalDate ld3 = ld2.minusDays(3); System.out.println(ld3); //주 더하기 LocalDate ld4 = ld3.plusWeeks(3); System.out.println(ld4); } } |
실행 결과
2025-01-25
2023-04-21 2023-04-18 2023-05-09 |
<시간을 더하고 빼는 메서드를 확인하는 코드>
package ch10;
import java.time.*; public class exam82 { public static void main(String[] args) { LocalDateTime ld = LocalDateTime.now(); System.out.println("현재 시간:" + ld); LocalDateTime ld2 = ld .minusHours(5) .plusMinutes(30) .minusSeconds(4); System.out.println("변경 시간:" + ld2); LocalDateTime ld3 = ld2.minusHours(24); System.out.println("자동 변환 시간:" + ld3); } } |
실행 결과
현재 시간:2025-01-25T21:30:00.017656600
변경 시간:2025-01-25T16:59:56.017656600 자동 변환 시간:2025-01-24T16:59:56.017656600 |
5)클래스들의 정보 값 변경하기
-각 클래스에는 필드 값들을 특정 값으로 변경할 수 있는 메서드가 있음
메서드 | 설명 | 메서드 | 설명 |
withYear(int) | 년 변경 | withHour(int) | 시간 변경 |
withMonth(int) | 월 변경 | withMinute(int) | 분 변경 |
withDayOfMonth(int) | 월의 일 변경 | withSecond(int) | 초 변경 |
withDayOfYear(int) | 년의 일 변경 | withNano(int) | 나노초 변경 |
<간단하게 날짜를 변경하는 코드>
package ch10;
import java.time.*; public class exam83 { public static void main(String[] args) { LocalDate ld = LocalDate.now(); System.out.println(ld); LocalDate new_ld = ld.withYear(1999) .withMonth(8) .withDayOfMonth(23); System.out.println(new_ld); } } |
실행 결과
2025-01-25
1999-08-23 |
<간단히 시간을 변경하는 코드>
package ch10;
import java.time.*; public class exam84 { public static void main(String[] args) { LocalTime lt = LocalTime.now(); System.out.println(lt); LocalTime new_time = lt.withHour(3) .withMinute(25) .withSecond(24) .withNano(33333); System.out.println(new_time); } } |
실행 결과
21:34:46.270159100
03:25:24.000033333 |
-현재 시간을 저장하고 출력하여 확인함. 그리고 시각을 3으로, 분을 25로, 초를 24로 변경하고 마지막으로 나노초를 33333으로 변경함
-with 메서드는 temporalAdjuster 타입을 인자로 받으면 특정한 날짜를 리턴함. 예를 들어 인자로 넘어온 객체의 년고, 그 연도의 첫 번째 일, 아니면 그 달의 첫 번째 일들을 리턴함
메서드 | 설명 |
firstDayYear() | 년도의 첫 번째 일 |
lastDayOfYear() | 년도의 마지막 일 |
firstDayOfMonth() | 달의 첫 번째 일 |
lastDayOfMonth() | 달의 마지막 일 |
firstInMonth(DayOfWeek dayOfWeek) | 달의 첫 번째 요일 |
lastInMonth(DayOfWeek dayOfWeek) | 달의 마지막 요일 |
next(DayOfWeek dayOfWeek) | 돌아오는 요일 |
nextOrSame(DayOfWeek dayOfWeek) | 오늘을 포함한 돌아오는 요일 |
previous(DayOfWeek dayOfWeek) | 지난 요일 |
previousOrSame(DayOfWeek dayOfWeek) | 오늘을 포함한 지난 요일 |
package ch10; import java.time.*; import java.time.temporal.TemporalAdjusters; public class exam86 { public static void main(String[] args) { LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); LocalDateTime new_ldt; new_ldt = ldt.with(TemporalAdjusters.firstDayOfYear()); System.out.println("올해의 첫 번째 날" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.lastDayOfYear()); System.out.println("올해의 마지막 날" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("이번 달의 첫번째 날" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("이번 달의 마지막 날" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); System.out.println("이번 달의 첫 월요일" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY)); System.out.println("이번 달의 마지막 일요일" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)); System.out.println("돌아오는 금요일" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY)); System.out.println("오늘을 포함한 다음 금요일" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)); System.out.println("지난 월요일" + new_ldt); new_ldt = ldt.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); System.out.println("오늘을 포함한 지난 월요일" + new_ldt); } } |
실행 결과
2025-01-25T21:44:49.205741
올해의 첫 번째 날2025-01-01T21:44:49.205741 올해의 마지막 날2025-12-31T21:44:49.205741 이번 달의 첫번째 날2025-01-01T21:44:49.205741 이번 달의 마지막 날2025-01-31T21:44:49.205741 이번 달의 첫 월요일2025-01-06T21:44:49.205741 이번 달의 마지막 일요일2025-01-26T21:44:49.205741 돌아오는 금요일2025-01-31T21:44:49.205741 오늘을 포함한 다음 금요일2025-01-31T21:44:49.205741 지난 월요일2025-01-20T21:44:49.205741 오늘을 포함한 지난 월요일2025-01-20T21:44:49.205741 |
-with 메서드 내부에 TemporalAdjusters의 멤버를 인자로 받아 특정한 날짜를 리턴하는 메서드임. TemporalAdjusters.메서드명() 을 인자로 받으며 특정한 요일의 날짜를 리턴 할 때는 내부 메서드에 [DayOfWeek.요일명]을 인자로 받음
6)클래스들의 정보 값 비교하기
-time 패키지에서는 각 필드 값을 비교하는 메서드를 사용함
메서드 | 설명 |
isAfter() | 이전의 날짜인지 비교하여 boolean값 반환 |
isBefore() | 지나간 날짜인지 비교하여 boolean값 반환 |
isEqual() | 동일 날짜인지 비교하여 boolean값 반환 |
until() | 날짜나 시간의 차이를 반환 |
between() | 전체 날짜나 시간의 차이를 반환 |
ex)유통기한
<간단하게 날짜를 변경하는 코드>
package ch10;
import java.time.*; public class exam87 { public static void main(String[] args) { LocalDateTime ldt1 = LocalDateTime.of(2010, 1, 1, 12, 23, 23, 444); System.out.println(ldt1); LocalDateTime ldt2 = LocalDateTime.of(2010, 12, 25, 1, 12, 2, 232); System.out.println(ldt2); System.out.println(ldt1.isAfter(ldt2)); //ldt1이 ldt2보다 이후의 날짜인가? System.out.println(ldt1.isBefore(ldt2)); //ldt1이 ldt2보다 이전의 날짜인가? System.out.println(ldt1.isEqual(ldt2)); //같은 날짜인 } } |
실행 결과
2010-01-01T12:23:23.000000444
2010-12-25T01:12:02.000000232 false true false |
-메서드를 호출하는 참조변수와 인자로 들어가는 참조변수간의 날짜 비교를 통해 그 값을 boolean 값으로 반환함
package ch10;
import java.time.*; public class exam88 { public static void main(String[] args) { LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); LocalDateTime end_time = LocalDateTime.of(2024, 6, 24, 12, 00); System.out.println(end_time); if(ldt.isAfter(end_time)) { System.out.println("유통기한이 지났습니다!"); } else { System.out.println("유통기한이 아직 지나지 않았습니다"); } } } |
실행 결과
2025-01-25T21:52:18.697907600
2024-06-24T12:00 유통기한이 지났습니다! |
-isAfter() 메서드를 이용해서 유통기한을 점검하는 코드임. ldt에 현재 시간을 받아오고 end_time에 유통기한을 미리 입력함. 프로그램이 실행될 때마다 ldt의 값은 변할 것임. isAfter() 메서드를 사용하여 만약 true일 경우 ldt에 저장된 시간이 유통기한을 넘은 것이므로 유통기간이 지났다는 문구가 출력되도록 조건문을 설정함
'프로그래밍 > java' 카테고리의 다른 글
JAVA 프로그래밍 52일차 (25/1/23) (0) | 2025.01.23 |
---|---|
JAVA 프로그래밍 51일차 (25/1/22) (2) | 2025.01.22 |
JAVA 프로그래밍 50일차 (25/1/21) (0) | 2025.01.21 |
JAVA 프로그래밍 49일차 (25/1/20) (2) | 2025.01.20 |
JAVA 프로그래밍 48일차 (25/1/17) (0) | 2025.01.17 |