Java Language
날짜 클래스
수색…
통사론
-
Date object = new Date();
-
Date object = new Date(long date);
매개 변수
매개 변수 | 설명 |
---|---|
매개 변수 없음 | 할당 시간 (밀리 초 단위)을 사용하여 새 Date 객체를 만듭니다. |
긴 데이트 | "the epoch"(1970 년 1 월 1 일, 00:00:00 GMT) 이후로 밀리 초 단위로 설정된 시간으로 새 Date 객체를 만듭니다. |
비고
대표
내부적으로 Java Date 객체는 long으로 표시됩니다. 특정 시간 ( 기원 이라고 함) 이후의 밀리 초 수입니다. 원래 Java Date 클래스에는 시간대 등을 처리하는 메소드가 있지만이 클래스는 새로운 Calendar 클래스를 사용하도록 권장되지 않습니다.
따라서 코드에서 수행하려는 작업이 특정 시간을 나타내는 경우 Date 클래스를 만들고 저장할 수 있습니다. 그러나 사람이 읽을 수있는 버전의 날짜를 인쇄하려면 Calendar 클래스를 만듭니다 포맷을 사용하여 시간, 분, 초, 일, 시간대 등을 생성 할 수 있습니다. 특정 밀리 초는 다른 시간대의 다른 시간으로 표시됩니다. 일반적으로 "로컬"표준 시간대에 표시하고 싶지만 서식 방법은 다른 표준 시간대에 표시하려는 경우를 고려해야합니다.
또한 JVM에서 사용하는 클럭은 일반적으로 밀리 초의 정확도를 가지지 않는다는 것을 알아 두십시오. 시계는 매 10 밀리 초마다 "틱"할 수 있으므로 시간을 측정하는 경우 해당 레벨에서 정확하게 물건을 측정하는 데 의존 할 수 없습니다.
Import Statement
import java.util.Date;
Date
클래스는 java.util
패키지에서 가져올 수 있습니다.
주의
Date
인스턴스는 변경 가능하므로 스레드 인스턴스를 사용하면 스레드 안전 코드를 작성하기가 어려워 지거나 실수로 내부 상태에 대한 쓰기 액세스를 제공 할 수 있습니다. 예를 들어, 아래 클래스에서 getDate()
메서드를 사용하면 호출자가 트랜잭션 날짜를 수정할 수 있습니다.
public final class Transaction {
private final Date date;
public Date getTransactionDate() {
return date;
}
}
해결 방법은 date
필드의 복사본을 반환하거나 Java 8에서 도입 된 java.time
의 새로운 API를 사용하는 것입니다.
Date
클래스의 대부분의 생성자 메서드는 더 이상 사용되지 않으므로 사용하지 않아야합니다. 거의 모든 경우에 날짜 작업에 Calendar
클래스를 사용하는 것이 좋습니다.
Java 8
Java 8은 LocalDate 및 LocalTime을 포함하여 java.time
패키지에 새로운 시간 및 날짜 API를 도입했습니다. java.time
패키지의 클래스는보다 쉽게 사용할 수있는 정밀 검사 된 API를 제공합니다. Java 8로 작성하는 경우이 새 API를 사용하는 것이 좋습니다. Dates and Time (java.time. *)을 참조하십시오.
Date 객체 만들기
Date date = new Date();
System.out.println(date); // Thu Feb 25 05:03:59 IST 2016
여기서이 Date
객체는이 객체가 생성 된 현재 날짜와 시간을 포함합니다.
Calendar calendar = Calendar.getInstance();
calendar.set(90, Calendar.DECEMBER, 11);
Date myBirthDate = calendar.getTime();
System.out.println(myBirthDate); // Mon Dec 31 00:00:00 IST 1990
Date
객체는 데이터 생성자 사용이 권장되지 않으므로 권장되지 않으므로 Calendar
인스턴스를 통해 가장 잘 생성됩니다. 우리는 Factory 메소드에서 Calendar
클래스의 인스턴스를 Calendar
. 그런 다음 숫자를 사용하여 연도, 월 및 일을 설정하거나 가독성을 높이고 오류를 줄이기 위해 Calendar 클래스에서 제공된 개월 수의 경우 설정할 수 있습니다.
calendar.set(90, Calendar.DECEMBER, 11, 8, 32, 35);
Date myBirthDatenTime = calendar.getTime();
System.out.println(myBirthDatenTime); // Mon Dec 31 08:32:35 IST 1990
날짜와 함께 시간, 분, 초 순서로 시간을 전달할 수 있습니다.
Date 객체 비교
달력, 날짜 및 LocalDate
before, after, compareTo 및 equals 메서드
//Use of Calendar and Date objects
final Date today = new Date();
final Calendar calendar = Calendar.getInstance();
calendar.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date birthdate = calendar.getTime();
final Calendar calendar2 = Calendar.getInstance();
calendar2.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date samebirthdate = calendar2.getTime();
//Before example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.before(birthdate)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", today, today, Boolean.valueOf(today.before(today)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.before(today)));
//After example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(birthdate)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(today)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.after(today)));
//Compare example
System.out.printf("Compare %1$tF to %2$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(birthdate)));
System.out.printf("Compare %1$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(today)));
System.out.printf("Compare %2$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(birthdate.compareTo(today)));
//Equal example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.equals(birthdate)));
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", birthdate, samebirthdate,
Boolean.valueOf(birthdate.equals(samebirthdate)));
System.out.printf(
"Because birthdate.getTime() -> %1$d is different from samebirthdate.getTime() -> %2$d, there are millisecondes!%n",
Long.valueOf(birthdate.getTime()), Long.valueOf(samebirthdate.getTime()));
//Clear ms from calendars
calendar.clear(Calendar.MILLISECOND);
calendar2.clear(Calendar.MILLISECOND);
birthdate = calendar.getTime();
samebirthdate = calendar2.getTime();
System.out.printf("Is %1$tF equal to %2$tF after clearing ms? %3$b%n", birthdate, samebirthdate,
Boolean.valueOf(birthdate.equals(samebirthdate)));
isBefore, isAfter, compareTo 및 equals 메서드
//Use of LocalDate
final LocalDate now = LocalDate.now();
final LocalDate birthdate2 = LocalDate.of(2012, 6, 30);
final LocalDate birthdate3 = LocalDate.of(2012, 6, 30);
//Hours, minutes, second and nanoOfsecond can also be configured with an other class LocalDateTime
//LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);
//isBefore example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(birthdate2)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(now)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isBefore(now)));
//isAfter example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(birthdate2)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(now)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isAfter(now)));
//compareTo example
System.out.printf("Compare %1$tF to %2$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(birthdate2)));
System.out.printf("Compare %1$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(now)));
System.out.printf("Compare %2$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(birthdate2.compareTo(now)));
//equals example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.equals(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.equals(birthdate3)));
//isEqual example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isEqual(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.isEqual(birthdate3)));
Java 8 이전의 날짜 비교
Java 8 이전에는 java.util.Calendar 및 java.util.Date 클래스를 사용하여 날짜를 비교할 수있었습니다. Date 클래스는 날짜를 비교하는 4 가지 메소드를 제공합니다.
after
, before
, compareTo
및 equals
메서드는 각 날짜에 대해 getTime () 메서드에서 반환 된 값을 비교합니다.
compareTo
메소드는 양의 정수를 반환합니다.
- 0보다 큰 값 : Date 인수가 Date 인수보다 뒤에있을 때
- 0보다 큰 값 : Date 인수가 Date 인수보다 앞에있는 경우
- 값이 0 인 경우 : Date가 Date 인수와 같은 경우
equals
실시 예에서와 같이 명시 적으로 지정하지 않는 경우의 값은, 밀리 초와 같은 동일한 값으로 초기화 할 수 있기 때문에 놀라운 결과 일 수있다.
자바 8 이후
Java 8에서는 Date로 작업 할 수있는 새로운 Object를 java.time.LocalDate에서 사용할 수 있습니다. LocalDate
는 연대기 또는 달력 시스템이 플러그 가능한 날짜의 추상 표현 인 ChronoLocalDate를 구현합니다.
날짜 정밀도를 가지려면 java.time.LocalDateTime 객체를 사용해야합니다. LocalDate
와 LocalDateTime
은 비교할 때 동일한 메소드 이름을 사용합니다.
LocalDate
사용하여 날짜를 비교하는 것은 ChronoLocalDate
를 사용하는 ChronoLocalDate
그 이유는 연대기 또는 달력 시스템이 첫 번째 계정에서 고려되지 않기 때문입니다.
대부분의 응용 프로그램은 LocalDate
를 ChronoLocalDate
는 예제에 포함되어 있지 않습니다. 여기에서 더 읽기.
대부분의 응용 프로그램에서는이 [ChronoLocalDate] 인터페이스가 아니라 메서드 서명, 필드 및 변수를 LocalDate로 선언해야합니다.
LocalDate
에는 날짜를 비교하는 5 가지 메소드가 있습니다.
- isAfter (ChronoLocalDate 기타)
- isBefore (ChronoLocalDate 기타)
- isEqual (다른 ChronoLocalDate)
- compareTo (ChronoLocalDate 기타)
- equals (Object obj)
LocalDate
매개 변수의 경우 isAfter
, isBefore
, isEqual
, equals
및 compareTo
이제이 메서드를 사용합니다.
int compareTo0(LocalDate otherDate) {
int cmp = (year - otherDate.year);
if (cmp == 0) {
cmp = (month - otherDate.month);
if (cmp == 0) {
cmp = (day - otherDate.day);
}
}
return cmp;
}
equals
파라미터 참조 반면 제 날짜와 동일한 경우에있어서 검사를 isEqual
직접 호출 compareTo0
.
ChronoLocalDate
의 다른 클래스 인스턴스의 경우 날짜는 Epoch Day
사용하여 비교됩니다. Epoch 일 수는 0 일이 1970-01-01 (ISO) 인 단순 증가 일 수입니다.
날짜를 특정 문자열 형식으로 변환
SimpleDateFormat
클래스의 format()
은 제공된 패턴 문자열 을 사용하여 Date
객체를 특정 형식의 String
객체로 변환하는 데 도움이됩니다.
Date today = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy"); //pattern is specified here
System.out.println(dateFormat.format(today)); //25-Feb-16
applyPattern()
을 사용하여 패턴을 다시 적용 할 수 있습니다.
dateFormat.applyPattern("dd-MM-yyyy");
System.out.println(dateFormat.format(today)); //25-02-2016
dateFormat.applyPattern("dd-MM-yyyy HH:mm:ss E");
System.out.println(dateFormat.format(today)); //25-02-2016 06:14:33 Thu
참고 : 여기에서 mm
(작은 문자 m)은 분을 나타내고 MM
(자본 M)은 월을 나타냅니다. 연도 형식을 지정할 때주의하십시오. 대문자 "Y"( Y
)는 "올해의 주"를 나타내며 소문자 "y"( y
)는 연도를 나타냅니다.
문자열을 날짜로 변환
SimpleDateFormat
클래스의 parse()
는 String
패턴을 Date
객체로 변환하는 데 SimpleDateFormat
합니다.
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
String dateStr = "02/25/2016"; // input String
Date date = dateFormat.parse(dateStr);
System.out.println(date.getYear()); // 116
텍스트 형식에는 SHORT
, MEDIUM
(기본값), LONG
및 FULL
(모두 로캘에 따라 다름) 등 4 가지 스타일이 있습니다. 로케일을 지정하지 않으면 시스템 기본 로케일이 사용됩니다.
스타일 | Locale.US | Locale.France |
---|---|---|
짧은 | 6/30/09 | 30/06/09 |
매질 | 2009 년 6 월 30 일 | 2009 년 9 월 30 일 |
긴 | 2009 년 6 월 30 일 | 2009 년 9 월 30 일 |
완전한 | 2009 년 6 월 30 일 화요일 | 2009 년 6 월 30 일 마디 |
기본 날짜 출력
문자열 yyyy/MM/dd hh:mm.ss
형식으로 다음 코드를 사용하면 다음 출력을 받게됩니다.
2016/04/19 11 : 45.36
// define the format to use
String formatString = "yyyy/MM/dd hh:mm.ss";
// get a current date object
Date date = Calendar.getInstance().getTime();
// create the formatter
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatString);
// format the date
String formattedDate = simpleDateFormat.format(date);
// print it
System.out.println(formattedDate);
// single-line version of all above code
System.out.println(new SimpleDateFormat("yyyy/MM/dd hh:mm.ss").format(Calendar.getInstance().getTime()));
날짜 형식화 된 문자열 표현을 Date 객체로 변환
이 메서드는 날짜 형식의 문자열 표현을 Date
객체로 변환하는 데 사용할 수 있습니다.
/**
* Parses the date using the given format.
*
* @param formattedDate the formatted date string
* @param dateFormat the date format which was used to create the string.
* @return the date
*/
public static Date parseDate(String formattedDate, String dateFormat) {
Date date = null;
SimpleDateFormat objDf = new SimpleDateFormat(dateFormat);
try {
date = objDf.parse(formattedDate);
} catch (ParseException e) {
// Do what ever needs to be done with exception.
}
return date;
}
특정 날짜 만들기
Java Date 클래스에는 여러 생성자가 있지만 대부분은 사용되지 않습니다. Date 인스턴스를 직접 생성하는 유일한 방법은 빈 생성자를 사용하거나 long (표준 기본 시간 이후로 밀리 초)을 전달하는 것입니다. 현재 날짜를 찾고 있거나 다른 Date 인스턴스를 이미 갖고 있지 않으면 편리하지 않습니다.
새 날짜를 만들려면 Calendar 인스턴스가 필요합니다. 여기에서 Calendar 인스턴스를 필요한 날짜로 설정할 수 있습니다.
Calendar c = Calendar.getInstance();
현재의 시각에 설정된 새로운 Calendar 인스턴스를 돌려줍니다. 캘린더에는 날짜와 시간을 변경하거나 완전히 설정하는 여러 가지 방법이 있습니다. 이 경우 특정 날짜로 설정합니다.
c.set(1974, 6, 2, 8, 0, 0);
Date d = c.getTime();
getTime
메소드는 필요한 Date 인스턴스를 리턴합니다. 캘린더 집합 메소드는 하나 이상의 필드 만 설정하며 모두 설정하지는 않습니다. 즉, 연도를 설정하면 다른 필드는 변경되지 않습니다.
함정
대부분의 경우이 코드 스 니펫은 그 목적을 달성하지만 날짜 / 시간의 두 가지 중요한 부분이 정의되지 않는다는 점을 명심하십시오.
-
(1974, 6, 2, 8, 0, 0)
매개 변수는 다른 표준 시간대 내에서 해석되며, - 밀리 초는 0으로 설정되지 않지만 Calendar 인스턴스가 생성 될 때 시스템 시계에서 채워집니다.
Java 8 LocalDate 및 LocalDateTime 객체
Date 개체는 특정 요일과 시간을 나타내므로 LocalDate 개체에는 시간 또는 시간대 정보가 포함되지 않으므로 Date 개체와 LocalDate 개체 는 서로간에 정확하게 변환 될 수 없습니다 . 그러나 시간 정보가 아닌 실제 날짜 정보 만 신경 쓰는 경우이 둘 사이의 변환이 유용 할 수 있습니다.
LocalDate를 만듭니다.
// Create a default date
LocalDate lDate = LocalDate.now();
// Creates a date from values
lDate = LocalDate.of(2017, 12, 15);
// create a date from string
lDate = LocalDate.parse("2017-12-15");
// creates a date from zone
LocalDate.now(ZoneId.systemDefault());
LocalDateTime를 작성합니다.
// Create a default date time
LocalDateTime lDateTime = LocalDateTime.now();
// Creates a date time from values
lDateTime = LocalDateTime.of(2017, 12, 15, 11, 30);
// create a date time from string
lDateTime = LocalDateTime.parse("2017-12-05T11:30:30");
// create a date time from zone
LocalDateTime.now(ZoneId.systemDefault());
LocalDate to Date 및 그 반대의 경우
Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();
// Date to LocalDate
LocalDate localDate = date.toInstant().atZone(defaultZoneId).toLocalDate();
// LocalDate to Date
Date.from(localDate.atStartOfDay(defaultZoneId).toInstant());
LocalDateTime을 날짜로 또는 그 반대로
Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();
// Date to LocalDateTime
LocalDateTime localDateTime = date.toInstant().atZone(defaultZoneId).toLocalDateTime();
// LocalDateTime to Date
Date out = Date.from(localDateTime.atZone(defaultZoneId).toInstant());
시간대 및 java.util.Date
java.util.Date
객체 에는 시간대 개념 이 없습니다 .
- 날짜에 대해 시간대를 설정할 방법이 없습니다.
- Date 객체의 시간대를 변경할 수 있는 방법은 없습니다.
-
new Date()
기본 생성자로 만든 Date 객체는 시스템 기본 시간대의 현재 시간으로 초기화됩니다.
그러나 java.text.SimpleDateFormat
사용하여 다른 시간대의 Date 객체가 설명하는 특정 시점으로 표시되는 날짜를 표시 할 수 있습니다.
Date date = new Date();
//print default time zone
System.out.println(TimeZone.getDefault().getDisplayName());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //note: time zone not in format!
//print date in the original time zone
System.out.println(sdf.format(date));
//current time in London
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(sdf.format(date));
산출:
Central European Time
2016-07-21 22:50:56
2016-07-21 21:50:56
java.util.Date를 java.sql.Date로 변환하십시오.
java.util.Date
to java.sql.Date
변환은 일반적으로 Date 객체를 데이터베이스에 작성해야 할 때 필요합니다.
java.sql.Date
는, 밀리 세컨드의 값의 래퍼이며, JDBC
에 의해 SQL DATE
타입을 식별하기 위해서 사용됩니다
아래의 예에서 우리는 java.util.Date()
생성자를 사용하여 Date 객체를 생성하고 시간을 가장 가까운 밀리 초 단위로 나타내도록 초기화합니다. 이 일자는, java.sql.Date
오브젝트를 돌려 convert(java.util.Date utilDate)
메소드 convert(java.util.Date utilDate)
사용됩니다.
예
public class UtilToSqlConversion {
public static void main(String args[])
{
java.util.Date utilDate = new java.util.Date();
System.out.println("java.util.Date is : " + utilDate);
java.sql.Date sqlDate = convert(utilDate);
System.out.println("java.sql.Date is : " + sqlDate);
DateFormat df = new SimpleDateFormat("dd/MM/YYYY - hh:mm:ss");
System.out.println("dateFormated date is : " + df.format(utilDate));
}
private static java.sql.Date convert(java.util.Date uDate) {
java.sql.Date sDate = new java.sql.Date(uDate.getTime());
return sDate;
}
}
산출
java.util.Date is : Fri Jul 22 14:40:35 IST 2016
java.sql.Date is : 2016-07-22
dateFormated date is : 22/07/2016 - 02:40:35
java.util.Date
에는 일자와 시각 정보가 있습니다 만, java.sql.Date
에는 일자 정보 만 있습니다
현지 시각
Date의 시간 부분 만 사용하려면 LocalTime을 사용하십시오. 몇 가지 방법으로 LocalTime 객체를 인스턴스화 할 수 있습니다.
-
LocalTime time = LocalTime.now();
-
time = LocalTime.MIDNIGHT;
-
time = LocalTime.NOON;
-
time = LocalTime.of(12, 12, 45);
LocalTime
에는 형식을 매우 멋지게 표현하는 toString 메서드가 내장되어 있습니다.
System.out.println(time);
당신은 또한 LocalTime 객체로부터 시간, 분, 초, 나노 초를 얻고, 더하거나 빼낼 수 있습니다.
time.plusMinutes(1);
time.getMinutes();
time.minusMinutes(1);
다음 코드로 Date 객체로 변환 할 수 있습니다.
LocalTime lTime = LocalTime.now();
Instant instant = lTime.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).
atZone(ZoneId.systemDefault()).toInstant();
Date time = Date.from(instant);
이 클래스는 자명종을 시뮬레이트하기 위해 타이머 클래스 내에서 매우 잘 작동합니다.