【Java】millisSecond에서 HH:mm:ss:SSS로 고리 누르기

처음에



카운트다운 앱을 만들려고 밀리초부터 시간표시를 하는 곳에서 막혔으므로 스스로 썼다.

문제가 있던 것



long형의 timeMilliSec을 주면, HH (0을 주면 07:00:00.000이 되어 버린다)
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
String timeFormatted = formatter.format(timeMilliSec);

코드



이것으로 해결?

TimeFormatter.java
public class TimeFormatter {
    public static String format(long millis) {
        long hour = (millis / (1000 * 60 * 60)) % 24;
        long minute = (millis / (1000 * 60))  % 60;
        long second = (millis / 1000)  % 60;
        long millisSec = millis % 1000;

        String time = String.format("%02d:%02d:%02d:%03d", hour, minute, second, millisSec);
        return time;
    }
}

사용 예



9342633ms를 02:35:42:554로 변환해 봅니다.
        int hour = 2;
        int minute = 35;
        int second = 42;
        long time =  (hour * 3600 + minute * 60 + second) * 1000 + 633;

        String formattedTime = TimeFormatter.format(time);

추가



SimpleDateFormat 사용



타임존의 관계로 Genymotion으로 움직이고 있을 때 시간이 어긋나 버린 것 같습니다.

이상한 클래스 만들지 않아도, Java의 API 사용하면 된다고 합니다!
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
        formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
        String timeFormatted = formatter.format(time);

다른 환경에서 시도해보기



기사와는 관계 없습니다만, 지금 공부중의 프레임워크에서도 움직여 보았습니다.

PlayFramework를 사용하여 Chrome에서 실행할 때 시간이 어긋나는 현상을 확인할 수있었습니다.

맨 오른쪽이 시간대 설정
        formatter.setTimeZone(TimeZone.getTimeZone("GMT"));

을 코멘트 아웃 한 부분입니다.

좋은 웹페이지 즐겨찾기