2015-10-31 22 views
-3

我有這樣的代碼來自學校,我似乎無法完全理解它在做什麼。我知道它顯示了一圈時間,就像來自體育的時間,在幾分鐘,幾秒鐘和幾毫秒內轉換,但我不明白2字符串變量是什麼以及它們做了​​什麼。圈時間格式代碼令人困惑

下面的代碼:

public String getTimeFormat(long ms){ 
    String s1 = ""+ms; 
    Date date = null; 
    try { 
     date = new SimpleDateFormat("SSS").parse(s1); 
    } catch (ParseException e){ 
     e.printStackTrace(); 
    } 
    String s2 = new SimpleDateFormat("mm:ss:SS").format(date); 
    return s2; 
} 
+3

問問你的老師其他人閱讀java基礎知識 – soorapadman

+0

現在是你最好學習一些基本的java教程 –

+0

這不是人們解決你的家庭作業的地方。 – Alboz

回答

5

首先,這在我看來是非常糟糕的代碼。

它轉換原始ms值轉換成字符串(所以35968將成爲「35968」),然後對其進行解析時爲Date,從中指定的毫秒數的格式,好像......這是再解釋爲「自格式化程序時區的Unix紀元以來的毫秒數」。

它然後轉換該Date值而進入由與另一SimpleDateFormat格式化一個分/秒/毫秒的格式。毫秒僅格式化爲2位小數,儘管在此使用:作爲分隔符而不是.,這很奇怪。 (它使它看起來像是一個小時/分鐘/秒的值,而不是分鐘/秒/毫秒)。

這兩種格式都使用相同的時區,其中至少有種類的避免了那裏的問題。但是:

  • 如果系統默認的時區有大約Unix紀元的轉變,有可能仍然是有些古怪
  • 從根本上它試圖通過將其視爲一個日期和時間格式化時間。這是一個壞主意
  • 「處理」的例外是可笑的 - 如果一個異常被拋出在解析時,第一個異常將被打印和NullPointerException將通過下面的行被拋出,因爲date仍將是空
  • 如果持續時間超過一個小時,信息將無聲丟失;目前還不清楚所需的行爲做法是什麼
  • 即使你沒有想是這樣的格式,這將是簡單的使用new Date(ms),然後用設置爲UTC的時區SimpleDateFormat格式化。有沒有需要任何字符串這裏分析

我不能輕易提供更好的代碼不知道多了一些要求,但如果你試圖將這段代碼,你應該考慮:

  • 鑑於你有幾毫秒,你確實只需要幾十毫秒的顯示精度?
  • 如果ms爲負數,您想怎麼辦?
  • 如果ms代表超過一個小時,您想要做什麼?
  • 您是否確定要:作爲秒和毫秒之間的分隔符?

然後,您可能想要使用String.format來格式化該值。不幸的是,Java 8中的Joda Time和java.time都沒有一種執行自定義Duration格式的好方法,這正是您真正想要的。

+1

好的,謝謝:)它讓我困惑與日期,但現在我明白了!非常感謝! –

+0

我明白,我正在轉換,所以我用你的建議,它使用新的日期(毫秒)和SimpleDateFormat。也改變了分隔符:)我不能有負面毫秒,因爲它已被定義爲積極的,不超過一個小時幸運:)但真的非常感謝幫助! –

+0

@LauraMoise:對 - 在這種情況下,我會在方法開始時添加測試,以確保*不是*否定的,並且*不超過一個小時。在這些情況下拋出'IllegalArgumentException'。 –