java
Java는 java.util 패키지에서 Date 클래스를 제공하며, 이 클래스는 현재 날짜와 시간을 캡슐화합니다.
Date 클래스는 다음 표와 같이 두 가지 생성자를 지원합니다.
| 번호 | 생성자 & 설명 |
|---|---|
| 1 | Date( ) 현재 날짜와 시간으로 객체 초기화. |
| 2 | Date(long millisec) 1970년 1월 1일 자정부터 경과한 밀리초 수와 같은 인자 수용. |
다음은 Date 클래스의 메서드들입니다.
| 번호 | 메서드 & 설명 |
|---|---|
| 1 | boolean after(Date date) 호출 Date 객체가 date로 지정된 날짜보다 나중이면 true, 아니면 false 반환. |
| 2 | boolean before(Date date) 호출 Date 객체가 date로 지정된 날짜보다 이전이면 true, 아니면 false 반환. |
| 3 | Object clone( ) 호출 Date 객체 복제. |
| 4 | int compareTo(Date date) 호출 객체 값과 date 비교. 값이 같으면 0, 호출 객체가 이전이면 음수, 나중이면 양수 반환. |
| 5 | int compareTo(Object obj) obj가 Date 클래스면 compareTo(Date)와 동일 작동. 아니면 ClassCastException 발생. |
| 6 | boolean equals(Object date) 호출 Date 객체가 date로 지정된 것과 같은 시간과 날짜면 true, 아니면 false. |
| 7 | long getTime( ) 1970년 1월 1일 이후 경과한 밀리초 수 반환. |
| 8 | int hashCode( ) 호출 객체의 해시 코드 반환. |
| 9 | void setTime(long time) 1970년 1월 1일 자정부터 경과한 밀리초인 time으로 시간과 날짜 설정. |
| 10 | String toString( ) 호출 Date 객체를 문자열로 변환하여 반환. |
Java에서 현재 날짜와 시간을 얻는 매우 쉬운 방법입니다. 간단한 Date 객체에 toString() 메서드를 사용하여 현재 날짜와 시간을 출력할 수 있습니다:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Date 객체 인스턴스화
Date date = new Date();
// toString()으로 시간과 날짜 표시
System.out.println(date.toString());
}
}
이 코드는 다음 결과를 생성합니다:
on May 04 09:51:52 CDT 2009
두 날짜를 비교하는 세 가지 방법은 다음과 같습니다:
getTime()으로 1970년 1월 1일 자정부터 경과한 밀리초를 두 객체 모두에 대해 얻고 이 두 값을 비교.
before(), after(), equals() 메서드 사용. 예를 들어 12일이 18일보다 앞서므로 new Date(99, 2, 12).before(new Date(99, 2, 18))는 true 반환.
Comparable 인터페이스가 정의하고 Date가 구현한 compareTo() 메서드 사용.
SimpleDateFormat은 로케일 민감한 방식으로 날짜를 포맷팅하고 파싱하기 위한 구체적인 클래스입니다. 사용자 정의 패턴으로 날짜-시간 포맷팅을 시작할 수 있습니다.
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
이 코드는 다음 결과를 생성합니다:
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
시간 포맷을 지정하려면 시간 패턴 문자열을 사용합니다. 이 패턴에서 모든 ASCII 문자는 패턴 문자로 예약되어 있으며 다음과 같이 정의됩니다:
| 문자 | 설명 | 예제 |
|---|---|---|
| G | 연대 지정자 | AD |
| y | 4자리 연도 | 2001 |
| M | 년의 월 | July 또는 07 |
| d | 월의 일 | 10 |
| h | 오전/오후 시간(1~12) | 12 |
| H | 일의 시간(0~23) | 22 |
| m | 시간의 분 | 30 |
| s | 분의 초 | 55 |
| S | 밀리초 | 234 |
| E | 주의 요일 | Tuesday |
| D | 년의 일 | 360 |
| F | 月の 주중 일 | 2 (7월 둘째 수요일) |
| w | 년의 주 | 40 |
| W | 월의 주 | 1 |
| a | 오전/오후 마커 | PM |
| k | 일의 시간(1~24) | 24 |
| K | 오전/오후 시간(0~11) | 10 |
| z | 시간대 | Eastern Standard Time |
| ' | 텍스트 이스케이프 | 구분자 |
| " | 작은따옴표 | ` |
날짜와 시간 포맷팅은 printf 메서드로 매우 쉽게 할 수 있습니다. t로 시작하고 다음 표의 문자 중 하나로 끝나는 두 글자 포맷을 사용합니다.
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
String str = String.format("Current Date/Time : %tc", date);
System.out.printf(str);
}
}
이 코드는 다음 결과를 생성합니다:
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
날짜의 각 부분을 포맷하기 위해 여러 번 날짜를 제공해야 한다면 어리석은 일입니다. 그래서 포맷 문자열로 포맷할 인자의 인덱스를 지정할 수 있습니다.
인덱스는 % 바로 뒤에 와야 하고 $로 끝나야 합니다.
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
이 코드는 다음 결과를 생성합니다:
Due date: February 09, 2004
또는 < 플래그를 사용할 수 있습니다. 이는 앞선 포맷 명세의 같은 인자를 다시 사용함을 나타냅니다.
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
이 코드는 다음 결과를 생성합니다:
Due date: February 09, 2004
| 문자 | 설명 | 예제 |
|---|---|---|
| c | 완전한 날짜와 시간 | Mon May 04 09:51:52 CDT 2009 |
| F | ISO 8601 날짜 | 2004-02-09 |
| D | 미국 형식 날짜(월/일/년) | 02/09/2004 |
| T | 24시간제 시간 | 18:05:19 |
| r | 12시간제 시간 | 06:05:19 pm |
| R | 초 없는 24시간제 | 18:05 |
| Y | 4자리 연도(앞자리 0 포함) | 2004 |
| y | 연도 끝 두 자리(앞자리 0 포함) | 04 |
| C | 연도 앞 두 자리(앞자리 0 포함) | 20 |
| B | 전체 월 이름 | February |
| b | 약어 월 이름 | Feb |
| m | 두 자리 월(앞자리 0 포함) | 02 |
| d | 두 자리 일(앞자리 0 포함) | 03 |
| e | 두 자리 일(앞자리 0 없음) | 9 |
| A | 전체 요일 이름 | Monday |
| a | 약어 요일 이름 | Mon |
| j | 년의 세 자리 일(앞자리 0 포함) | 069 |
| H | 두 자리 시간(앞자리 0 포함), 00~23 | 18 |
| k | 두 자리 시간(앞자리 0 없음), 0~23 | 18 |
| I | 두 자리 시간(앞자리 0 포함), 01~12 | 06 |
| l | 두 자리 시간(앞자리 0 없음), 1~12 | 6 |
| M | 두 자리 분(앞자리 0 포함) | 05 |
| S | 두 자리 초(앞자리 0 포함) | 19 |
| L | 세 자리 밀리초(앞자리 0 포함) | 047 |
| N | 아홉 자리 나노초(앞자리 0 포함) | 047000000 |
| P | 대문자 오전/오후 마커 | PM |
| p | 소문자 오전/오후 마커 | pm |
| z | GMT로부터 RFC 822 숫자 오프셋 | -0800 |
| Z | 시간대 | PST |
| s | 1970-01-01 00:00:00 GMT 이후 초 | 1078884319 |
| Q | 1970-01-01 00:00:00 GMT 이후 밀리초 | 1078884319047 |
날짜와 시간 관련 다른 유용한 클래스들도 있습니다. 자세한 내용은 Java 표준 문서를 참조하세요.
SimpleDateFormat 클래스에는 주어진 SimpleDateFormat 객체에 저장된 포맷에 따라 문자열을 파싱하려는 parse() 메서드 등 추가 메서드들이 있습니다.
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
위 프로그램의 샘플 실행 결과:
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
컴퓨터 수명까지 1밀리초부터 원하는 기간만큼 대기할 수 있습니다. 예를 들어 다음 프로그램은 3초 동안 대기합니다:
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
이 코드는 다음 결과를 생성합니다:
Sun May 03 18:04:41 GMT 2009 Sun May 03 18:04:51 GMT 2009
가끔 밀리초 단위의 시점을 측정해야 할 수 있습니다. 위 예제를 다시 작성해보겠습니다:
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis();
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
long end = System.currentTimeMillis();
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
이 코드는 다음 결과를 생성합니다:
Sun May 03 18:16:51 GMT 2009 Sun May 03 18:16:57 GMT 2009 Difference is : 5993
GregorianCalendar는 익숙한 일반 그레고리력 달력을 구현한 Calendar 클래스의 구체적 구현체입니다. 이 튜토리얼에서는 Calendar 클래스를 다루지 않았으며, 표준 Java 문서에서 찾아볼 수 있습니다.
Calendar의 getInstance() 메서드는 기본 로케일과 시간대의 현재 날짜와 시간으로 초기화된 GregorianCalendar를 반환합니다. GregorianCalendar는 AD와 BC 두 필드를 정의합니다. 이는 그레고리력에서 정의된 두 시대입니다.
GregorianCalendar 객체에는 여러 생성자도 있습니다:
| 번호 | 생성자 & 설명 |
|---|---|
| 1 | GregorianCalendar() 기본 시간대/로케일의 현재 시간으로 기본 GregorianCalendar 구성. |
| 2 | GregorianCalendar(int year, int month, int date) 기본 시간대/로케일에서 주어진 날짜로 설정된 GregorianCalendar 구성. |
| 3 | GregorianCalendar(int year, int month, int date, int hour, int minute) 기본 시간대/로케일에서 주어진 날짜와 시간으로 설정된 GregorianCalendar 구성. |
| 4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 기본 시간대/로케일에서 주어진 날짜와 시간으로 설정된 GregorianCalendar 구성. |
| 5 | GregorianCalendar(Locale aLocale) 기본 시간대에서 현재 시간, 주어진 로케일로 GregorianCalendar 구성. |
| 6 | GregorianCalendar(TimeZone zone) 주어진 시간대에서 현재 시간, 기본 로케일로 GregorianCalendar 구성. |
| 7 | GregorianCalendar(TimeZone zone, Locale aLocale) 주어진 시간대와 로케일로 GregorianCalendar 구성. |
GregorianCalendar 클래스가 제공하는 몇 가지 유용한 지원 메서드들:
| 번호 | 메서드 & 설명 |
|---|---|
| 1 | void add(int field, int amount) 달력 규칙에 따라 지정된 시간 필드에 지정된 (부호 있는) 시간량 추가. |
| 2 | protected void computeFields() UTC 밀리초를 시간 필드 값으로 변환. |
| 3 | protected void computeTime() 시간 필드 값을 UTC 밀리초로 변환. |
| 4 | boolean equals(Object obj) 이 GregorianCalendar를 객체 참조와 비교. |
| 5 | int get(int field) 주어진 시간 필드 값 가져오기. |
| 6 | int getActualMaximum(int field) 현재 날짜 기준으로 이 필드가 가질 수 있는 최대값 반환. |
| 7 | int getActualMinimum(int field) 현재 날짜 기준으로 이 필드가 가질 수 있는 최소값 반환. |
| 8 | int getGreatestMinimum(int field) 필드가 가변적이면 최고 최소값 반환. |
| 9 | Date getGregorianChange() 그레고리력 변경 날짜 가져오기. |
| 10 | int getLeastMaximum(int field) 필드가 가변적이면 최저 최대값 반환. |
| 11 | int getMaximum(int field) 주어진 필드의 최대값 반환. |
| 12 | Date getTime() 이 Calendar의 현재 시간 가져오기. |
| 13 | long getTimeInMillis() 이 Calendar의 현재 시간을 long으로 가져오기. |
| 14 | TimeZone getTimeZone() 시간대 가져오기. |
| 15 | int getMinimum(int field) 주어진 필드의 최소값 반환. |
| 16 | int hashCode() hashCode 오버라이드. |
| 17 | boolean isLeapYear(int year) 주어진 해가 윤년인지 판단. |
| 18 | void roll(int field, boolean up) 더 큰 필드 변경 없이 주어진 시간 필드에 시간 단위 1 증가/감소. |
| 19 | void set(int field, int value) 주어진 값으로 시간 필드 설정. |
| 20 | void set(int year, int month, int date) 연도, 월, 일 필드 값 설정. |
| 21 | void set(int year, int month, int date, int hour, int minute) 연도, 월, 일, 시, 분 필드 값 설정. |
| 22 | void set(int year, int month, int date, int hour, int minute, int second) 연도, 월, 일, 시, 분, 초 필드 값 설정. |
| 23 | void setGregorianChange(Date date) 그레고리력 변경 날짜 설정. |
| 24 | void setTime(Date date) 주어진 Date로 이 Calendar의 현재 시간 설정. |
| 25 | void setTimeInMillis(long millis) 주어진 long 값으로 이 Calendar의 현재 시간 설정. |
| 26 | void setTimeZone(TimeZone value) 주어진 시간대 값으로 시간대 설정. |
| 27 | String toString() 이 달력의 문자열 표현 반환. |
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int year;
// 기본 로케일과 시간대의 현재 날짜/시간으로 초기화된 그레고리력 달력 생성
GregorianCalendar gcalendar = new GregorianCalendar();
// 현재 시간과 날짜 정보 표시
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// 현재 해가 윤년인지 테스트
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
} else {
System.out.println("The current year is not a leap year");
}
}
}
이 코드는 다음 결과를 생성합니다:
Date: Apr 22 2009 Time: 11:25:27 The current year is not a leap year
Calendar 클래스에서 사용 가능한 상수 전체 목록은 표준 Java 문서를 참조하세요.
java
Java 8 질문과 답변은 다양한 자격증 시험과 취업 면접을 준비하는 학생과 전문가를 돕기 위해 특별히 설계되었습니다. 이 섹션에서는 샘플 면접 질문과 객관식 문제(MCQ), 그리고 적절한 설명이 포함된 답변 모음을 제공합니다. 번호 질문/답변 유형 1 Java 8 면접 질문 이 섹션에서는 답변이 박스 안에 숨겨진 Java 8 면접 질문 모음을 제공하여, 정답을 보기 전에 직접 풀어볼 수 있도록 했습니다. 2 Java 8 온라인 퀴즈 이 섹션에서는 정답과 설명이 포함된 Java 8 객관식 문제(MCQ) 모음을 단일 페
부품 및 소모품 부품 수량 아두이노 우노 (Arduino UNO) 1 DHT11 온도 및 습도 센서 (4핀) 1 Maxim Integrated DS3231 RTC 모듈 1 저항 10k 옴 1 Adafruit 128x64 OLED 그래픽 디스플레이 1 브레드보드 (일반) 1 점퍼 와이어 (일반) 15 프로젝트 소개 직접 시간, 날짜, 온도, 습도를 표시하는 인터페이스를 만들고 싶었던 적이 있나요? 생각보다 훨씬 간단합니다. 아래와 같은 몇 가지 핵심 부품만 있으면 됩니다. 아두이노 우노/나노