[java] Java에서 Gregorian Calendar 날짜와 비교하기 위해 Java Date에서 Year, Month, Day 등을 가져오고 싶습니다. 이게 가능해?

Java의 Date 객체로 Java의 Date 객체가 저장되어 있습니다.

또한 Gregorian Calendar 작성 날짜가 있습니다. gregorian calendar 날짜에는 매개 변수가 없으므로 오늘 날짜 (및 시간?)의 인스턴스입니다.

Java 날짜를 사용하면 Java 날짜 유형에서 년, 월, 일,시, 분 및 초를 가져 와서 gregoriancalendar 날짜를 비교할 수 있기를 원합니다.

나는 현재 Java 날짜가 long으로 저장되어 있으며 사용할 수있는 유일한 방법은 long을 형식이 지정된 날짜 문자열로 쓰는 것 같습니다. 년, 월, 일 등에 액세스 할 수있는 방법이 있습니까?

나는 것을보고 getYear(), getMonth()위해 등의 방법 Date클래스가 사용되지 않습니다. 날짜와 함께 Java Date 인스턴스를 사용하는 가장 좋은 방법이 무엇인지 궁금 GregorianCalendar합니다.

내 최종 목표는 날짜 계산을 수행하여 Java 날짜가 오늘 날짜 및 시간의 너무 많은 시간, 분 등 내에 있는지 확인할 수 있습니다.

나는 여전히 Java의 초보자이며 이것에 약간 당황하고 있습니다.



답변

다음과 같은 것을 사용하십시오 :

Date date; // your date
// Choose time zone in which you want to interpret your Date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
// etc.

개월은 1이 아니라 0에서 시작합니다.

편집 : Java 8부터 java.util.Calendar 대신 java.time.LocalDate 를 사용 하는 것이 좋습니다 . 방법에 대해서는 이 답변 을 참조하십시오 .


답변

Java 8 이상에서는 Date 객체를 LocalDate 객체 로 변환 한 다음 연도, 월, 일을 쉽게 얻을 수 있습니다.

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year  = localDate.getYear();
int month = localDate.getMonthValue();
int day   = localDate.getDayOfMonth();

getMonthValue()1에서 12 사이의 int 값 을 반환합니다.


답변

이런 식으로 Date수업이 어떻게 진행되는지 설명 할 수 있습니다.

String currentDateString = "02/27/2012 17:00:00";
SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date currentDate = sd.parse(currentDateString);

String yourDateString = "02/28/2012 15:00:00";
SimpleDateFormat yourDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

Date yourDate = yourDateFormat.parse(yourDateString);

if (yourDate.after(currentDate)) {
    System.out.println("After");
} else if(yourDate.equals(currentDate)) {
    System.out.println("Same");
} else {
    System.out.println("Before");
}


답변

    Date date = new Date();

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");

    System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());

    simpleDateFormat = new SimpleDateFormat("MMMM");
    System.out.println("MONTH "+simpleDateFormat.format(date).toUpperCase());

    simpleDateFormat = new SimpleDateFormat("YYYY");
    System.out.println("YEAR "+simpleDateFormat.format(date).toUpperCase());

편집 : date= 의 출력 Fri Jun 15 09:20:21 CEST 2018은 다음과 같습니다

DAY FRIDAY
MONTH JUNE
YEAR 2018


답변

private boolean isSameDay(Date date1, Date date2) {
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTime(date1);
    Calendar calendar2 = Calendar.getInstance();
    calendar2.setTime(date2);
    boolean sameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
    boolean sameMonth = calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
    boolean sameDay = calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
    return (sameDay && sameMonth && sameYear);
}


답변

    Date queueDate = new SimpleDateFormat("yyyy-MM-dd").parse(inputDtStr);
    Calendar queueDateCal = Calendar.getInstance();
    queueDateCal.setTime(queueDate);
    if(queueDateCal.get(Calendar.DAY_OF_YEAR)==Calendar.getInstance().get(Calendar.DAY_OF_YEAR))
{
    "same day of the year!";
 }


답변

@Test
public void testDate() throws ParseException {
    long start = System.currentTimeMillis();
    long round = 100000l;
    for (int i = 0; i < round; i++) {
        StringUtil.getYearMonthDay(new Date());
    }
    long mid = System.currentTimeMillis();
    for (int i = 0; i < round; i++) {
        StringUtil.getYearMonthDay2(new Date());
    }
    long end = System.currentTimeMillis();
    System.out.println(mid - start);
    System.out.println(end - mid);
}

public static Date getYearMonthDay(Date date) throws ParseException {
    SimpleDateFormat f = new SimpleDateFormat("yyyyyMMdd");
    String dateStr = f.format(date);
    return f.parse(dateStr);
}

public static Date getYearMonthDay2(Date date) throws ParseException {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.HOUR_OF_DAY, 0);
    return c.getTime();
}
public static int compare(Date today, Date future, Date past) {
    Date today1 = StringUtil.getYearMonthDay2(today);
    Date future1 = StringUtil.getYearMonthDay2(future);
    Date past1 = StringUtil.getYearMonthDay2(past);
    return today.compare // or today.after or today.before
}

getYearMonthDay2 (달력 솔루션)가 10 배 더 빠릅니다. 이제 yyyy MM dd 00 00 00이며 날짜를 사용하여 비교하십시오.