2016-08-27 92 views
0
Scanner input2 = new Scanner(System.in); 
System.out.println("Time to be converted to hh:mm:ss: "); 
int time = input2.nextInt(); 
int hr = 0, min = 0, sec = 0; 
if(time >= 3600) 
{ 
    hr = time/3600; 
    time = time%3600; 
} 
if(time >= 60) 
{ 
    time = time%3600; 
    min = time/60; 
} 
if (time < 60) 
{ 
    sec += time; 
} 
System.out.println(hr+":"+min+":"+sec); 

所以,我的問題是,每當秒大於3719,分鐘和小時停止遞增。爪哇時間轉換

例子:

3719 
1:1:59 

3720 
1:1:0 

7325 
1:1:0 

香港專業教育學院也嘗試了不同的算法,使用替代模

Scanner input2 = new Scanner(System.in); 
System.out.println("Time to be converted to hh:mm:ss: "); 
int time = input2.nextInt(); 
int hr = 0, min = 0, sec = 0; 
if(time >= 3600) 
{ 
    hr ++; 
    time -=3600; 
} 
if(time >= 60) 
{ 
    time -= 60; 
    min ++; 
} 
if (time < 60) 
{ 
    sec += time; 
} 
System.out.println(hr+":"+min+":"+sec); 

回答

2

那是因爲你是在模使用3600 min減法:

if (time >= 60) { 
    min = time/60; 
    time = time % 3600; 
} 

但是您必須使用60,將其更改爲:

public static void main(String[] args) { 
    Scanner input2 = new Scanner(System.in); 
    System.out.println("Time to be converted to hh:mm:ss: "); 
    int time = input2.nextInt(); 
    int hr = 0, min = 0, sec = 0; 
    if (time >= 3600) { 
     hr = time/3600; 
     time = time % 3600; 
    } 
    if (time >= 60) { 
     min = time/60; 
     time = time % 60; 
    } 
    if (time < 60) { 
     sec += time; 
    } 
    System.out.println(hr + ":" + min + ":" + sec); 
} 

它會按照您的預期工作。

檢查在這裏http://ideone.com/unTQTW

+0

這會如何導致問題? – RamenChef

+0

因爲在這一分鐘裏有60秒沒有3600 – DimaSan

+0

有趣的是怎麼這麼小的一個錯誤不能被我看到。感謝第三隻眼睛。 – OntologicalSin

1

讓我們避免重蹈覆轍,只是使用SimpleDateFormat與作爲下一個合適的模式:

Scanner input2 = new Scanner(System.in); 
System.out.println("Time to be converted to hh:mm:ss: "); 
int time = input2.nextInt(); 
// Create the formater 
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss"); 
// Multiply the time in sec by 1000 to get milliseconds 
// Then convert the total amount of milliseconds into a Date 
// And finally format the date 
System.out.println(format.format(new Date(time * 1000L))); 
+0

實際上'SimpleDateFormat'已被'DateTimeFormatter'所取代,它是用於替換麻煩的舊的傳統日期 - 時間類的java.time類之一。 –

+0

@BasilBourque thx的信息,但我意識到這一點,我只是假設,OP不像大多數人那樣使用Java 8就這樣提出問題,但你是對的,我可能是錯的 –

1

你的第二個算法工作,儘管它應使用while代替if,以便它可以增加多次。

Scanner input2 = new Scanner(System.in); 
System.out.println("Time to be converted to hh:mm:ss: "); 
int time = input2.nextInt(); 
int hr = 0, min = 0, sec = 0; 
while(time >= 3600) 
{ 
    hr++; 
    time -= 3600; 
} 
while(time >= 60) 
{ 
    time -= 60; 
    min++; 
} 
while(time < 60) 
{ 
    sec += time; 
} 
System.out.println(hr+":"+min+":"+sec); 
1

相反的:

if(time >= 60) 
{ 
    time = time%3600; 
    min = time/60; 
} 

應該有:

if(time >= 60) 
{ 
    min = time/60; 
    time = time%60; 

} 

您還可以,如果條件跳過並添加前導零:

public final static void main(String[] args) { 
    Scanner input2 = new Scanner(System.in); 
    System.out.println("Time to be converted to hh:mm:ss: "); 
    int time = input2.nextInt(); 
    int hr = 0, min = 0, sec = 0; 

    hr = time/3600; 
    time = time%3600; 
    min = time/60; 
    sec = time%60; 

    System.out.println(String.format("%02d:%02d:%02d", hr, min, sec)); 
} 
1

TL;博士

Duration.ofSeconds (7_325L).toString() 

PT2H2M5S

詳細

Answer by DimaSan是正確的,解決數學問題。

僅供參考,java.time類可以爲你做這個數學工作。

另外,不建議跟蹤時間跨度中的hh:mm:ss格式的字符串ISO。這種格式造成了模糊性,因爲它看起來像是一天的時間。 ISO 8601標準爲日期時間值定義了許多明智的明確格式。在一段時間內沒有附加到時間線的那個被稱爲durationsPnYnMnDTnHnMnSP標誌着開始,T將年月日從幾分鐘秒分開。例如,「P3Y6M4DT12H30M5S」代表「三年,六個月,四天,十二小時,三十分鐘和五秒」的持續時間。一分半鐘是PT1M30S

解析/生成字符串時,java.time類默認使用ISO 8601格式。

java.time.Duration

Duration類java.time表示時間跨度爲和分數作爲第二納秒的秒的總數。

Duration d = Duration.ofSeconds(3_719L); 
String output = d.toString(); 

PT1H1M59S

接着,更大的數字。

Duration d = Duration.ofSeconds (7_325L); 

PT2H2M5S

在Java 8該類莫名其妙地缺乏對各種部件的吸氣劑的方法,例如的小時數和分鐘數和秒數。在Java 9中補充了getPart方法。

關於java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了麻煩的舊日期時間課程,如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。

大部分的java.time功能後移植到Java 6 和ThreeTenABP還適於Android(見How to use…)。

ThreeTen-Extra項目擴展java.time與其他類。這個項目是未來可能增加java.time的一個試驗場。你可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuarter,等等。