JavaRush /Java Blog /Random-KO /시간에 쫓기지 않는 방법 - 날짜/시간 및 달력

시간에 쫓기지 않는 방법 - 날짜/시간 및 달력

Random-KO 그룹에 게시되었습니다
안녕하세요! 오늘 우리는 이전에 접하지 못했던 새로운 데이터 유형, 즉 날짜에 대한 작업을 시작할 것입니다. 시간에 쫓기지 않는 방법 - 날짜/시간 및 달력 - 1날짜가 무엇인지 설명할 필요는 없을 것 같습니다 :) 원칙적으로 Java에서는 현재 날짜와 시간을 일반 문자열로 쓰는 것이 가능합니다.
public class Main {
   public static void main(String[] args) {

       String date = "June 11, 2018";
       System.out.println(date);
   }
}
그러나 이 접근 방식에는 많은 단점이 있습니다. 클래스는 String텍스트 작업을 위해 만들어졌으며 적절한 메서드가 있습니다. 어떻게든 날짜를 관리해야 하는 경우(예를 들어 2시간 추가) String여기서는 작동하지 않습니다. 또는 예를 들어 프로그램이 콘솔에 컴파일된 시점의 현재 날짜와 시간을 표시합니다. 여기서도 도움이 되지 않습니다 String. 코드를 작성하고 실행하는 동안 시간이 변경되고 관련 없는 내용이 콘솔에 표시됩니다. 따라서 Java에서는 작성자가 날짜 및 시간 작업을 위한 여러 클래스를 제공했습니다. 첫 번째는 수업이다.java.util.Date

Java 날짜 클래스

Java의 다른 패키지에도 클래스가 있기 때문에 전체 이름을 지정했습니다 java.sql.Date. 혼동하지 마세요! 가장 먼저 알아야 할 것은 1970년 1월 1일 이후 경과된 날짜를 밀리초 단위로 저장한다는 것입니다. 이 날짜에는 "Unix time"이라는 별도의 이름도 있습니다. 꽤 흥미로운 방법입니다. 동의하지 않나요? :) 두 번째로 기억해야 할 점: 빈 생성자를 사용하여 객체를 생성하는 경우 결과는 객체가 생성된 시점의 현재 날짜 및 시간이Date 됩니다 . 그러한 작업이 날짜 형식에 문제가 될 수 있다고 우리가 어떻게 썼는지 기억하시나요? 수업을 통해 쉽게 해결해 드립니다. StringDate
public class Main {
   public static void main(String[] args) {

       Date date = new Date();
       System.out.println(date);
   }
}
이 코드를 여러 번 실행하면 매번 시간이 어떻게 변하는지 확인할 수 있습니다 :) 이는 밀리초로 저장되어 있기 때문에 정확하게 가능합니다. 이는 시간의 가장 작은 단위이므로 결과가 매우 정확합니다. 에 대한 또 다른 생성자가 있습니다 Date. 1970년 1월 1일 00:00부터 필요한 날짜까지 경과한 정확한 밀리초 수를 지정할 수 있으며 생성됩니다.
public class Main {
   public static void main(String[] args) {

       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}
콘솔 출력:

Fri May 30 08:20:12 MSD 2008
2008년 5월 30일에 확인했습니다. "금요일"은 요일 - "금요일"(금요일)을 의미하고 MSD - "모스크바 일광 절약 시간제"(모스크바 여름 시간)를 의미합니다. 밀리초는 형식으로 전송됩니다 long. 그 숫자가 대부분 에 맞지 않기 때문입니다 int. 그렇다면 작업에 어떤 종류의 날짜 작업이 필요할 수 있습니까? 물론 가장 확실한 것은 비교 입니다 . 한 날짜가 다른 날짜보다 늦은지 아니면 빠른지 확인합니다. 이것은 다양한 방법으로 수행될 수 있습니다. Date.getTime()예를 들어, 1970년 1월 1일 자정 이후 경과된 밀리초 수를 반환하는 .메서드를 호출할 수 있습니다 . 두 개의 Date 객체에 대해 이를 호출하고 서로 비교해 보겠습니다.
public class Main {
   public static void main(String[] args) {

       Date date1 = new Date();

       Date date2 = new Date();

       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}
결론:

date1 раньше date2
그러나 더 편리한 방법이 있습니다. 즉, 클래스의 특수 메서드를 사용 Date하는 before()after()입니다 equals(). 그들은 모두 결과를 boolean. 이 메소드는 before()날짜가 인수로 전달한 날짜보다 빠른지 확인합니다.
public class Main {
   public static void main(String[] args) throws InterruptedException {

       Date date1 = new Date();

       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();

       System.out.println(date1.before(date2));
   }
}
콘솔 출력:

true
이 메소드는 비슷한 방식으로 작동합니다 after(); 날짜가 인수로 전달한 날짜보다 이후인지 확인합니다.
public class Main {
   public static void main(String[] args) throws InterruptedException {

       Date date1 = new Date();

       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();

       System.out.println(date1.after(date2));
   }
}
콘솔 출력:

false
예제에서는 두 날짜가 서로 다르도록 프로그램을 2초 동안 절전 모드로 설정했습니다. date1빠른 컴퓨터에서는 및 생성 사이의 시간이 date21밀리초 미만일 수 있으며, 이 경우 및 before()및 모두 after()반환됩니다 false. equals()하지만 그러한 상황에서는 메서드가 반환됩니다 true! 결국, 각 날짜에 대해 1970년 1월 1일 0시 이후 경과된 밀리초 수를 정확하게 비교합니다. 개체는 밀리초 단위까지 일치하는 경우에만 동일한 것으로 간주됩니다.
public static void main(String[] args) {

   Date date1 = new Date();
   Date date2 = new Date();

   System.out.println(date1.getTime());
   System.out.println(date2.getTime());

   System.out.println(date1.equals(date2));
}
여기에 주목해야 할 또 다른 사항이 있습니다. Oracle 웹 사이트에서 해당 클래스에 대한 설명서를 열면 해당 클래스의 메서드와 생성자 중 다수가 "사용되지 않음" Date으로 지정되어 있는 것을 볼 수 있습니다 . Deprecated여기를 보세요: Class Date 더 이상 사용되지 않는 클래스 부분에 대해 Java 작성자가 직접 말하는 내용은 다음과 같습니다. “@Deprecated로 주석이 달린 프로그램 요소는 일반적으로 위험하거나 위험하기 때문에 프로그래머가 사용하지 않는 것입니다. 더 나은 대안이 있습니다.” 그렇다고 이러한 방법을 전혀 사용할 수 없다는 의미는 아닙니다. 또한 IDEA에서 이를 사용하여 코드를 실행하려고 하면 대부분 작동할 것입니다.예를 들어 Date.getHours()객체에서 시간을 반환하는 더 이상 사용되지 않는 메서드를 예로 들어 보겠습니다 Date.
public static void main(String[] args) {

   Date date1 = new Date();

   System.out.println(date1.getHours());

}
예를 들어, 코드를 실행할 때 시간이 14:21이라면 숫자 14가 표시됩니다. 보시다시피 더 이상 사용되지 않는 메서드에 줄이 그어져 있지만 꽤 잘 작동합니다. 이러한 메서드는 완전히 제거되지 않았으므로 이미 해당 메서드를 사용하여 작성된 코드 묶음을 손상시키지 않습니다. 즉, 이러한 방법은 "손상"되거나 "제거"되지 않으며 더 편리한 대안이 있기 때문에 사용이 권장되지 않습니다. 그건 그렇고, 문서에 바로 이에 대해 기록되어 있습니다. 시간에 쫓기지 않는 방법 - 날짜/시간 및 달력 - 2Date 클래스의 메소드 대부분은 향상된 확장 버전인 클래스로 이동되었습니다 Calendar. 그에 대해 더 자세히 알아볼까요 :)

자바 달력

Java 1.1에는 새로운 클래스인 Calendar. 그는 Java에서 날짜 작업을 이전보다 조금 더 쉽게 만들었습니다. Calendar우리가 작업할 클래스의 유일한 구현은 클래스입니다 GregorianCalendar(이 클래스는 세계 대부분의 국가에서 사용하는 그레고리력을 구현합니다). 가장 편리한 점은 보다 편리한 형식으로 날짜를 처리할 수 있다는 것입니다. 예를 들어, 그는 다음을 수행할 수 있습니다.
  • 현재 날짜에 월 또는 일 추가
  • 해당 연도가 윤년인지 확인하세요.
  • 개별 날짜 구성 요소 가져오기(예: 전체 날짜에서 월 번호 가져오기)
  • 또한 그 내부에는 매우 편리한 상수 시스템이 개발되었습니다(아래에서 그 중 많은 내용을 볼 수 있습니다).
클래스의 또 다른 중요한 차이점은 Calendar상수를 구현한다는 것입니다 Calendar.Era. 날짜를 BC (“Before Christ” – 그리스도 탄생 전, 즉 “우리 시대 전”) 또는 AC (“After Christ” – “)로 설정할 수 있습니다. 우리 시대"). 예제를 통해 이 모든 것을 살펴보겠습니다. 2017년 1월 25일 날짜로 달력을 만들어 보겠습니다.
public static void main(String[] args) {

  Calendar calendar = new GregorianCalendar(2017, 0 , 25);
}
Calendar그런데 클래스의 월은 Date0부터 시작하므로 숫자 0을 두 번째 인수로 전달했습니다. 수업을 진행할 때 가장 중요한 것은 이것이 별도의 날짜가 아니라 달력Calendar 이라는 점을 이해하는 것입니다 . 날짜 는 단순히 특정 기간을 나타내는 일련의 숫자입니다. 그리고 달력은 날짜로 많은 일을 할 수 있는 전체 장치입니다. :) 이는 Calendar 개체를 콘솔에 출력하려고 하면 매우 명확하게 볼 수 있습니다. 출력: 시간에 쫓기지 않는 방법 - 날짜/시간 및 달력 - 3

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=0,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=25,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
얼마나 많은 정보가 있는지 확인해보세요! 달력에는 일반 날짜에는 없는 여러 가지 속성이 있으며 모두 콘솔에 출력됩니다( toString()클래스의 메서드가 작동하는 방식입니다 Calendar). 작업할 때 달력에서 간단한 날짜만 가져와야 하는 경우, 즉 객체 Date- 이는 메소드를 사용하여 수행됩니다 Calendar.getTime()(이름이 가장 논리적이지는 않지만 아무 것도 수행할 수 없음).
public static void main(String[] args) {

   Calendar calendar = new GregorianCalendar(2017, 0 , 25);
   Date date = calendar.getTime();
   System.out.println(date);
}
결론:

Wed Jan 25 00:00:00 MSK 2017
이제 달력을 일반 날짜로 "간소화"했습니다. 계속 진행합시다. 개월 단위의 숫자 기호 외에도 Calendar교실에서는 상수를 사용할 수 있습니다. Calendar상수는 변경할 수 없는 이미 설정된 값이 있는 클래스의 정적 필드입니다 . 이 옵션은 코드의 가독성을 향상시키기 때문에 실제로 더 좋습니다.
public static void main(String[] args) {
   GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
}
Calendar.JANUARY— 월을 표시하는 상수 중 하나입니다. 예를 들어, 이 이름 지정 옵션을 사용하면 숫자 "3"이 4월을 의미하고 우리에게 익숙한 세 번째 달인 3월이 아니라는 사실을 아무도 잊지 않을 것입니다. 그냥 쓰기 Calendar.APRIL만 하면 됩니다 :) 모든 달력 필드(일, 월, 분, 초 등)는 메소드를 사용하여 개별적으로 설정할 수 있습니다 set(). Calendar각 필드는 클래스에 고유한 상수를 갖고 최종 코드는 최대한 단순해 보이기 때문에 매우 편리합니다 . 예를 들어, 이전 예에서는 날짜를 생성했지만 현재 시간을 설정하지 않았습니다. 시간을 19:42:12로 설정하겠습니다.
public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar();
   calendar.set(Calendar.YEAR, 2017);
   calendar.set(Calendar.MONTH, 0);
   calendar.set(Calendar.DAY_OF_MONTH, 25);
   calendar.set(Calendar.HOUR_OF_DAY, 19);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   System.out.println(calendar.getTime());
}
결론:

Wed Jan 25 19:42:12 MSK 2017
메소드를 호출하고 set()여기에 상수(변경하려는 필드에 따라 다름)와 이 필드에 대한 새 값을 전달합니다. set()이 메소드 는 하나의 필드가 아닌 여러 필드에 값을 설정할 수 있는 일종의 "수퍼 세터"인 것으로 밝혀졌습니다 . :) 클래스의 값을 더하고 Calendar빼는 작업은 add(). 변경하려는 필드와 숫자(현재 값에서 정확히 얼마나 더하거나 뺄 것인지)를 전달해야 합니다. 예를 들어 생성 날짜를 2개월 전으로 설정해 보겠습니다.
public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 19);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   calendar.add(Calendar.MONTH, -2);//to subtract a value - a negative number must be passed to the method
   System.out.println(calendar.getTime());
}
결론:

Fri Nov 25 19:42:12 MSK 2016
엄청난! 날짜를 2개월 전으로 다시 설정했습니다. 결과적으로 월뿐만 아니라 연도도 2017년에서 2016년으로 변경되었습니다. 물론 날짜 이동 시 현재 연도 계산은 자동으로 수행되므로 수동으로 제어할 필요가 없습니다. 그러나 어떤 목적으로 인해 이 동작을 비활성화해야 한다면 그렇게 할 수 있습니다. 특별한 방법을 사용 roll()하면 다른 값에 영향을 주지 않고 값을 더하거나 뺄 수 있습니다. 예를 들어 다음과 같습니다.
public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 10);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   calendar.roll(Calendar.MONTH, -2);
   System.out.println(calendar.getTime());
}
이전 예와 정확히 동일하게 수행했습니다. 즉, 현재 날짜에서 2개월을 뺍니다. 하지만 이제 코드는 다르게 작동했습니다. 달은 1월에서 11월로 변경되었지만 연도는 2017년과 동일하게 유지되었습니다! 결론:

Sat Nov 25 10:42:12 MSK 2017
더 나아가. 위에서 말했듯이 객체의 모든 필드는 Calendar별도로 얻을 수 있습니다. 메소드는 다음을 담당합니다 get().
public static void main(String[] args) {
   GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 10);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   System.out.println("Year: " + calendar.get(Calendar.YEAR));
   System.out.println("Month: " + calendar.get(Calendar.MONTH));
   System.out.println("Number of the week in the month: " + calendar.get(Calendar.WEEK_OF_MONTH));// serial number of the week in the month

   System.out.println("Number: " + calendar.get(Calendar.DAY_OF_MONTH));

   System.out.println("Watch: " + calendar.get(Calendar.HOUR));
   System.out.println("Minutes: " + calendar.get(Calendar.MINUTE));
   System.out.println("Seconds: " + calendar.get(Calendar.SECOND));
   System.out.println("Milliseconds: " + calendar.get(Calendar.MILLISECOND));

}
결론:

Год: 2017 
Месяц: 0 
Порядковый номер недели в месяце: 4 
Число: 25 
Часы: 10 
Минуты: 42 
Секунды: 12 
Миллисекунды: 0
즉, 수업의 "슈퍼 세터"외에도 Calendar"슈퍼 게터"도 있습니다. :) 또 다른 흥미로운 점은 물론 시대 작업입니다. 날짜 "BC"를 생성하려면 필드를 사용해야 합니다. Calendar.Era 예를 들어, 한니발이 로마 군대를 격파한 칸나에 전투를 나타내는 날짜를 생성해 보겠습니다. 이것은 기원전 216년 8월 2일에 일어났습니다. 이자형.:
public static void main(String[] args) {
   GregorianCalendar cannes = new GregorianCalendar(216, Calendar.AUGUST, 2);
   cannes.set(Calendar.ERA, GregorianCalendar.BC);

   DateFormat df = new SimpleDateFormat("dd MMM yyy GG");
   System.out.println(df.format(cannes.getTime()));
}
여기서는 클래스를 사용하여 SimpleDateFormat우리가 더 이해하기 쉬운 형식으로 날짜를 표시했습니다(문자 "GG"는 연대를 표시합니다). 결론:

02 авг 216 до н.э.
클래스에는 Calendar더 많은 메소드와 상수가 있습니다 . 문서에서 이에 대해 읽어보세요.

문자열을 날짜로 변환

문자열을 날짜로 변환하려면 Java 도우미 클래스인 SimpleDateFormat을 사용할 수 있습니다 . 이것은 날짜를 정의한 형식으로 변환하는 데 필요한 클래스입니다. 시간에 쫓기지 않는 방법 - 날짜/시간 및 달력 - 5결과적으로 DateFormat 과 매우 유사합니다 . 둘 사이의 눈에 띄는 유일한 차이점은 SimpleDateFormat을 형식화(날짜를 문자열로 변환)하고 문자열을 로케일 인식 날짜로 구문 분석하는 데 사용할 수 있는 반면 DateFormat은 로케일을 지원하지 않는다는 것입니다. 또한 DateFormat은 날짜 형식 지정 및 구문 분석에 대한 기본 지원을 제공하는 추상 클래스인 반면 SimpleDateFormat은 DateFormat 클래스를 확장하는 구체적인 클래스입니다. SimpleDateFormat 객체를 생성하고 날짜 형식을 지정하는 예는 다음과 같습니다.
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(1212121212121L);

System.out.println(formatter.format(date));
위의 예에서는 "yyyy-MM-dd HH:mm:ss" 패턴을 사용했습니다. 이는 다음을 의미합니다.
  • 연도는 4자리(yyyy)입니다.
  • 월(MM)은 2자리입니다.
  • 일(dd)은 2자리입니다.
  • 24시간 형식(HH)의 시간은 2자리입니다.
  • 분은 2자리(mm)입니다.
  • 초(ss)를 나타내는 2자리 숫자입니다.
분리 표시와 패턴 기호의 순서는 유지됩니다. 콘솔 출력:
2008-05-30 08:20:12
SimpleDateFormat 클래스 에는 꽤 많은 템플릿 문자가 있습니다 . 혼란스럽지 않도록 표에 정리했습니다.
상징 설명
G 시대(영어 현지화 - AD 및 BC) 기원 후
와이 연도(4자리 숫자) 2020
연도(마지막 2자리) 20
이야 연도(4자리 숫자) 2020
월 번호(앞에 0이 붙지 않음) 8
MM 월 번호(월 번호가 < 10인 경우 앞에 0이 붙음) 04
세 글자로 된 월 약어(현지화에 따름) 1월
으음 전체 달 이름 6월
해당 주(앞에 0이 붙지 않음) 4
W w 올해의 주(앞에 0이 붙음) 04
주 단위(앞에 0이 붙지 않음)
W W 월별 주(앞에 0이 붙음) 03
올해의 날 67
해당 월의 일(앞에 0이 붙지 않음) 9
dd 해당 월의 일(앞에 0이 붙음) 09
에프 해당 월의 요일(앞에 0이 붙지 않음) 9
FF 월의 요일(앞에 0이 붙음) 09
이자형 요일(약어)
에에에에에에 요일(전체) 금요일
요일 번호(앞에 0이 붙지 않음) 5
요일 수(앞에 0이 붙음) 05
오전/오후 마커 오전.
시간 앞에 0이 없는 24시간 형식의 시간 6
앞에 0이 있는 24시간 형식 시계 06
케이 24시간 형식의 시간 18
케이 12시간 형식의 시간 6
시간 앞에 0이 없는 12시간 형식의 시간 6
앞에 0이 있는 12시간 형식의 시간 06
앞에 0이 없는 분 32
mm 앞에 0이 있는 분 32
에스 앞에 0이 없는 초 열하나
봄 여름 시즌 앞에 0이 있는 초 열하나
에스 밀리초 297
시간대 EET
RFC 822 형식의 시간대 300
패턴 문자 조합의 예:
견본
dd-MM-yyyy 2020년 1월 11일
yyyy-MM-dd 2019-10-01
HH:mm:ss.SSS 23:59.59.999
yyyy-MM-dd HH:mm:ss 2018-11-30 03:09:02
yyyy-MM-dd HH:mm:ss.SSS 2016-03-01 01:20:47.999
yyyy-MM-dd HH:mm:ss.SSS Z 2013-13-13 23:59:59.999 +0100
형식에 약간의 실수가 있으면 java.text.ParseException의 소유자가 될 수 있으며 이는 특별히 기분 좋은 성과는 아닙니다. 자, SimpleDateFormat 에 대한 짧은 여행은 끝났습니다. Java 문자열을 date로 번역하는 작업으로 돌아가겠습니다 . SimpleDateFormat은 이러한 기능을 제공하므로 이 프로세스를 단계별로 살펴보겠습니다.
  1. 날짜를 설정해야 하는 줄을 만듭니다.

    String strDate = "Sat, April 4, 2020";
  2. 문자열에 있는 것과 일치하는 템플릿을 사용하여 새 SimpleDateFormat 객체를 만듭니다 (그렇지 않으면 구문 분석할 수 없습니다).

    SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMMM d, yyyy", Locale.ENGLISH);

    보시다시피 여기에 Locale 인수가 있습니다. 생략하면 항상 영어가 아닌 기본 로케일이 사용됩니다.

    로케일이 입력 문자열과 일치하지 않으면 Mon 또는 April 과 같은 언어에 바인딩된 문자열 데이터가 인식되지 않으며 패턴이 일치하더라도 java.text.ParseException이 발생합니다.

    그러나 특정 언어가 아닌 템플릿을 사용하는 경우에는 형식을 지정할 필요가 없습니다. 예를 들어 - yyyy-MM-dd HH:mm:ss

  3. 포맷터를 사용하여 날짜를 생성한 후 입력 문자열에서 이를 구문 분석합니다.

    try {
      Date date = formatter.parse(strDate);
      System.out.println(date);
    }
    catch (ParseException e) {
      e.printStackTrace();
    }

    콘솔 출력:

    
    Sat Apr 04 00:00:00 EEST 2020

    흠... 하지만 형식은 더 이상 동일하지 않습니다!

    동일한 형식을 만들기 위해 포맷터를 다시 사용합니다.

    System.out.println(formatter.format(date));

    콘솔 출력:

    
    Sat, April 4, 2020

SimpleDate형식 및 달력

SimpleDateFormat을 사용하면 나중에 사용하기 위해 생성한 모든 날짜 및 달력 개체의 형식을 지정할 수 있습니다. 시대 작업과 같은 흥미로운 점을 고려해 봅시다. "BC" 날짜를 생성하려면 Calendar.Era 필드를 사용해야 합니다. 예를 들어 한니발이 로마 군대를 격파한 칸나에 전투를 나타내는 날짜를 생성해 보겠습니다. 이것은 기원전 216년 8월 2일에 일어났습니다. 이자형.:
public static void main(String[] args) {
   GregorianCalendar cannes = new GregorianCalendar(216, Calendar.AUGUST, 2);
   cannes.set(Calendar.ERA, GregorianCalendar.BC);

   DateFormat df = new SimpleDateFormat("dd MMM yyy GG");
   System.out.println(df.format(cannes.getTime()));
}
여기서는 SimpleDateFormat 클래스를 사용하여 날짜를 더 이해하기 쉬운 형식으로 표시했습니다(위에서 설명한 대로 "GG"라는 문자가 시대를 표시합니다). 결론:

02 авг 216 до н.э.

자바 날짜 형식

또 다른 사례가 있습니다. 이 날짜 형식이 우리에게 적합하지 않다고 가정해 보겠습니다.

Sat Nov 25 10:42:12 MSK 2017
여기 있습니다. Java 날짜 형식의 기능을 사용하면 별 어려움 없이 이를 원하는 대로 변경할 수 있습니다.
public static void main(String[] args) {

   SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, d MMMM yyyy");
   Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 10);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   calendar.roll(Calendar.MONTH, -2);
   System.out.println(dateFormat.format(calendar.getTime()));
}
결론:

суббота, 25 Ноябрь 2017
훨씬 나아졌죠? :)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION