IT박스

Java에서 날짜 객체에 시간을 설정하는 방법

itboxs 2020. 12. 3. 07:40
반응형

Java에서 날짜 객체에 시간을 설정하는 방법


DateJava 개체를 만들었습니다 . 그렇게하면 다음과 같이 표시 date=Tue Aug 09 00:00:00 IST 2011됩니다.. 결과적으로 내 엑셀 파일이 하루 씩 줄어든 것 같다 (2 월 27 일은 2 월 26 일이되는 식으로) 시간 때문인 것 같다. 오후 5시 30 분과 같이 설정하려면 어떻게해야합니까?


Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,17);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

참조


날짜 개체 설정에 사용하는 코드를 보여줄 수 있습니까? 어쨌든 <날짜 초기화에이 코드를 사용할 수 있습니다.

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2011-01-01 00:00:00")

나는 현대적인 대답에 기여하고 싶습니다. 여기에는 java.time최신 Java 날짜 및 시간 API 를 사용하는 것이 포함되며 , 이를 피할 방법이없는 경우를 제외하고 는 이전 버전이 Date아닙니다 Calendar.

귀하의 문제는 실제로 시간대 문제 일 가능성이 높습니다. 2011 년 8 월 9 일 화요일 00:00:00 IST 2011 일 때는 IST 자정 서쪽 시간대에 아직 도달하지 않았습니다. 여전히 8 월 8 일입니다. 예를 들어 Excel에 날짜를 넣는 API가 UTC를 예상하는 경우 날짜는 의도 한 전날이됩니다. 진짜 좋은 해결책은 00:00 UTC (또는 다른 쪽 끝에서 예상되고 사용되는 시간대 또는 오프셋)의 날짜-시간을 생성하는 것입니다.

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    ZonedDateTime utcDateDime = yourDate.atStartOfDay(ZoneOffset.UTC);
    System.out.println(utcDateDime);

이것은 인쇄

2018-02-27T00:00Z

ZUTC를 의미합니다 (UTC 또는 Zulu 시간대의 오프셋 0으로 생각). 물론 LocalDate첫 번째 코드 줄에서 Excel로 전달할 수 있다면 더 좋습니다 . 시간이 포함되어 있지 않으므로 혼동이 없습니다. 반면에 구식 Date객체 가 필요한 경우 전달하기 직전에 변환하십시오 Date.

    Date oldfashionedDate = Date.from(utcDateDime.toInstant());
    System.out.println(oldfashionedDate);

내 컴퓨터에서 이것은 인쇄

Tue Feb 27 01:00:00 CET 2018

속지 마십시오. 맞습니다. 내 시간대 (중부 유럽 표준시)는 2 월 UTC (표준 시간)에서 오프셋 +01 : 00이므로 여기서 01:00:00은 UTC 00:00:00과 같습니다. 그냥있어 Date.toString()JVM들 시간대를 잡아 문자열을 생성하는 그것을 사용.

오후 5시 30 분과 같이 설정하려면 어떻게해야합니까?

직접 질문에 직접 답하기 위해 ZonedDateTime, OffsetDateTime또는 LocalDateTime이있는 경우 이러한 모든 경우에 다음과 같이 요청한 사항을 수행 할 수 있습니다.

    yourDateTime = yourDateTime.with(LocalTime.of(17, 30));

경우 yourDateTime있었다 LocalDateTime2018-02-27T00:00, 지금은 될 것입니다 2018-02-27T17:30. 다른 유형과 마찬가지로 오프셋과 시간대도 적절하게 포함합니다.

위의 첫 번째 스 니펫과 같이 날짜 만있는 경우 시간 정보를 추가 할 수도 있습니다.

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    LocalDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30));

대부분의 경우 특정 시간대에 시간을 추가하는 것이 좋습니다. 예를 들면 다음과 같습니다.

    ZonedDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30))
            .atZone(ZoneId.of("Asia/Kolkata"));

이것은 2018-02-27T17:30+05:30[Asia/Kolkata].

DateCalendarjava.time

다른 답변 Date마찬가지로 사용하고 사용 하는 수업 은 오래 되고 특히 성가신 것으로 입증되었습니다. 모든 경우에 최신 Java 날짜 및 시간 API는 작업하기에 훨씬 좋습니다. 그렇기 때문에 아직 방문중인 오래된 질문에 대해이 답변을 제공하고 싶었습니다.CalendarSimpleDateFormatSimpleDateFormat

링크 : 사용 방법을 설명하는 Oracle Tutorial Date Timejava.time .

참고 URL : https://stackoverflow.com/questions/5165428/how-to-set-time-to-a-date-object-in-java

반응형