신기원 시간을 주면 : 예를 들어 (1513213212) 오전 1 시부 터 현재는 1이되어야합니다. 오늘의 시간으로 바꾸려면 어떻게해야합니까? 그것은 수학 (division, mod)을 사용하여 가능합니까?신기원 시간을 시간으로 변환하기
답변
수학 만 사용하면 거의 불가능합니다. (도약 연도와 모두). 모든 노력을 다할 수있는 확립 된 API를 사용하는 것이 좋습니다.
다음과 같은 방법으로이 작업을 수행 할 수 있습니다.
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(1513213212* 1000L);
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(cal.get(Calendar.HOUR));//12 hour clock
System.out.println(cal.get(Calendar.HOUR_OF_DAY));//24 hour clock
어린 학생들에게 오래된 오래된 캘린더 클래스를 사용하지 않도록 가르치십시오. 오늘날 우리는 현대 Java 날짜 및 시간 API 인''java.time' (https://docs.oracle.com/javase/tutorial/datetime/)에서 훨씬 더 뛰어납니다. –
"오늘의 시간"을 묻는 질문을 다르게 해석 했습니까? 두 번째 값이 1513260000이면 정답으로 14를 이해했습니다. 당신의 코드는 2를 인쇄합니다. –
OP가 젊거나 그렇지 않은지 잘 모르겠습니다. 네 말이 맞아, 나는 12 시간 형식을 사용하고 있었다. 24 시간 형식도 추가되었습니다. – 11thdimension
사용 java.time
, 또한 JSR-310로 알려진 현대 자바 날짜와 시간 API : 당신은 단지 수학을하고 싶어해도
01:00:12
1
:
LocalTime timeOfDay = Instant.ofEpochSecond(1513213212L)
.atOffset(ZoneOffset.UTC)
.toLocalTime();
System.out.println(timeOfDay);
int hourOfDay = timeOfDay.getHour();
System.out.println(hourOfDay);
이 인쇄 , 나는 그것을 위해 표준 라이브러리 방법을 사용하는 것을 선호 할 것이다 :
long epochSeconds = 1513213212L;
// convert the seconds to days and back to seconds to get the seconds in a whole number of days
long secondsInWholeDays = TimeUnit.DAYS.toSeconds(TimeUnit.SECONDS.toDays(epochSeconds));
long hourOfDay = TimeUnit.SECONDS.toHours(epochSeconds - secondsInWholeDays);
System.out.println(hourOfDay);
이렇게해도 1
이 인쇄됩니다.
귀하의 의도는 "획기적인 시간을주었습니다. 예 : (UTC) 오전 1시 이후로 1을 가져야합니다."귀하의 의견에 위의 코드 스 니펫 중 어느 것이이 의도를 가장 명확하게 표현합니까? 이것이 제가 선택한 것을 사용하는 것입니다.
MadProgrammer는 his/her comment에서 날짜와 시간 계산이 복잡하므로 날짜와 시간 API에 그대로 두어야한다고 생각하지만 너무 복잡한 수학이 정확하지 않은 드문 경우 중 하나라고 생각합니다. 대답. 윤초 문제를 무시하는 것이 안전한지 여부에 달려 있습니다. 수학 솔루션으로가는 경우이 가정을 확인해야합니다. 개인적으로 나는 어쨌든 그것을 사용하지 않을 것이다.
수학을 사용할 수는 있지만 확실한 이유가 있는데 LocalTime 클래스가 존재합니다. –
* "수학 (division, mod)을 사용하면 가능합니까?"* - 엄격히 말하면 그렇지만 그렇게해서는 안됩니다. 날짜/시간 수학은 복잡하고 많은 수의 엣지 케이스를 다루어야합니다 (하루 24 시간 또는 1 년 365 일이 항상있는 것은 아닙니다). Java 8+에서 사용 가능한 Date/Time API를 사용하거나, 실제로 멈춘다면, Calendar 나 java.util.Date를 사용하는 것이 더 낫습니다. – MadProgrammer
이것 좀보세요 : https://stackoverflow.com/ questions/30709897/convert-millisecond-to-joda-date-time-for-zone-0000 –