2017-12-14 3 views
0

신기원 시간을 주면 : 예를 들어 (1513213212) 오전 1 시부 터 현재는 1이되어야합니다. 오늘의 시간으로 바꾸려면 어떻게해야합니까? 그것은 수학 (division, mod)을 사용하여 가능합니까?신기원 시간을 시간으로 변환하기

+1

수학을 사용할 수는 있지만 확실한 이유가 있는데 LocalTime 클래스가 존재합니다. –

+4

* "수학 (division, mod)을 사용하면 가능합니까?"* - 엄격히 말하면 그렇지만 그렇게해서는 안됩니다. 날짜/시간 수학은 복잡하고 많은 수의 엣지 케이스를 다루어야합니다 (하루 24 시간 또는 1 년 365 일이 항상있는 것은 아닙니다). Java 8+에서 사용 가능한 Date/Time API를 사용하거나, 실제로 멈춘다면, Calendar 나 java.util.Date를 사용하는 것이 더 낫습니다. – MadProgrammer

+0

이것 좀보세요 : https://stackoverflow.com/ questions/30709897/convert-millisecond-to-joda-date-time-for-zone-0000 –

답변

0

수학 만 사용하면 거의 불가능합니다. (도약 연도와 모두). 모든 노력을 다할 수있는 확립 된 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 
+0

어린 학생들에게 오래된 오래된 캘린더 클래스를 사용하지 않도록 가르치십시오. 오늘날 우리는 현대 Java 날짜 및 시간 API 인''java.time' (https://docs.oracle.com/javase/tutorial/datetime/)에서 훨씬 더 뛰어납니다. –

+0

"오늘의 시간"을 묻는 질문을 다르게 해석 했습니까? 두 번째 값이 1513260000이면 정답으로 14를 이해했습니다. 당신의 코드는 2를 인쇄합니다. –

+1

OP가 젊거나 그렇지 않은지 잘 모르겠습니다. 네 말이 맞아, 나는 12 시간 형식을 사용하고 있었다. 24 시간 형식도 추가되었습니다. – 11thdimension

2

사용 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에 그대로 두어야한다고 생각하지만 너무 복잡한 수학이 정확하지 않은 드문 경우 중 하나라고 생각합니다. 대답. 윤초 문제를 무시하는 것이 안전한지 여부에 달려 있습니다. 수학 솔루션으로가는 경우이 가정을 확인해야합니다. 개인적으로 나는 어쨌든 그것을 사용하지 않을 것이다.

관련 문제