2016-09-25 1 views
4

초 단위로 생성자를 생성하여 HH : MM : SS로 변환하는 생성자를 만들고 싶습니다. 나는 긍정적 인 초와 함께 이것을 꽤 쉽게 할 수있다. 그러나 나는 약간의 어려움에 부정적 초를 맞이하고있다. 여기네거티브 초를 시간으로 변환 : 분 : 초

는 내가 지금까지 무엇을 가지고 :

private final int HOUR, MINUTE, SECOND, TOTAL_TIME_IN_SECONDS; 

public MyTime(int timeInSeconds) { 
    if (timeInSeconds < 0) { 
     //Convert negative seconds to HH:MM:SS 
    } else { 
     this.HOUR = (timeInSeconds/3600) % 24; 
     this.MINUTE = (timeInSeconds % 3600)/60; 
     this.SECOND = timeInSeconds % 60; 
     this.TOTAL_TIME_IN_SECONDS 
       = (this.HOUR * 3600) 
       + (this.MINUTE * 60) 
       + (this.SECOND); 
    } 
} 

참고 TimeInSeconds가 -1 나는 시간이 23시 59분 59초을 반환하려면, 등

감사합니다!

답변

1

어떻게

if (timeInSeconds < 0) { 
    return MyTime(24 * 60 * 60 + timeInSeconds); 
} 

따라서 루프는 것, 당신은 기존의 논리를 이용 것이다

에 대해.

당신은 생성자의 시작이 추가 재귀에게

+0

Sergio answer - while과 비슷한 코멘트가 여기에 있습니다. 모듈러스 (%)는 훨씬 더 우수합니다. –

2
if (time < 0) 
    time += 24 * 60 * 60; 

을 방지하기 위해 while 루프를 사용하여 if를 교체 할 수 있습니다. 큰 음수가 예상되는 경우 IF를 실시합니다.

+0

"while"은 그다지 효율적이지 않습니다. 모듈러스가 훨씬 우수합니다 : -1 % 86400 = 86399 –

+0

그냥 시도했지만 ... 작동하지 않습니다. 음수라는 것을 알기 때문에 이것을해야합니다 : 86400 + num % 86400; -1에서 86399를 얻는다. –

+0

죄송합니다. 파이썬에서 %가 어떻게 작동하는지 (파이썬에서는 86399를 반환)와 혼동을 느낍니다. 그러나 여전히 일반적인 생각은 정확합니다. %는 while보다 더 효율적입니다. –

2
class MyTime { 
    private final int HOUR, MINUTE, SECOND, TOTAL_TIME_IN_SECONDS; 
    private static final int SECONDS_IN_A_DAY = 86400; 

    public MyTime(int timeInSeconds) { 
    prepare(normalizeSeconds(timeInSeconds)); 
    } 

    private int normalizeSeconds(int timeInSeconds) { 
     //add timeInSeconds % SECONDS_IN_A_DAY modulo operation if you expect values exceeding SECONDS_IN_A_DAY: 
     //or throw an IllegalArgumentException 
     if (timeInSeconds < 0) { 
     return SECONDS_IN_A_DAY + timeInSeconds; 
    } else { 
     return timeInSeconds; 
    } 
    } 

    private prepare(int timeInSeconds) { 
     this.HOUR = (timeInSeconds/3600) % 24; 
     this.MINUTE = (timeInSeconds % 3600)/60; 
     this.SECOND = timeInSeconds % 60; 
     this.TOTAL_TIME_IN_SECONDS 
       = (this.HOUR * 3600) 
       + (this.MINUTE * 60) 
       + (this.SECOND); 
    } 

} 
관련 문제