2014-04-22 68 views
0

我需要比較兩個時間字符串,我已經輸入..我能夠做它的日期,但時間我無法做到這一點。請在下面找到我試過的代碼:無法解析時間字符串到指定的格式

我的問題是.. - 我能夠根據格式輸入格式來獲取時間格式,但是我無法解析它。因爲只有在解析它的時候,我才能夠比較並找出Varible Time字段是否可以獲得差異。請找我們做了下面的代碼:

try{ 
DateFormat df = new SimpleDateFormat(format); 

//假設我輸入的格式爲HH:MM:SS

df.setLenient(false); 

       T1 = new Date(); //here we will get the current Time 
       temp_Time = df.format(T1); 

//我們改變我們所要求的格式(示例格式 - HH:mm:ss。So Temp_Time = 18:20:45)。

   T1 = df.parse(temp_Time); 

//當我們嘗試分析它,我們得到星期四1月1 IST十三點24分四十秒1970年我們能夠解析爲日期,只爲它不工作的時間格式。

+0

請顯示一個簡短但完整的程序來展示問題。目前還不清楚。 –

+0

如果你只給它一次,它必須猜測日期,所以它假定爲1.1.1970。如果你想比較時間,比較格式化的字符串可能會更好。 –

+0

您是否嘗試過類似於http://www.mkyong.com/java/how-to-convert-string-to-date-java/上的示例2? – WOUNDEDStevenJones

回答

2

爲了看到你的語法分析結果的樣子(java.util.Date類型的對象),你必須重新格式化:

DateFormat df = new SimpleDateFormat("HH:mm:ss"); 
Date time = df.parse("18:20:45"); 

// visualizing the result 
System.out.println(df.format(time)); // output: 18:20:45 

你不能只是System.out.println(time)依賴,因爲該代碼只使用輸出toString()java.util.Date,它依賴於系統時區,並根據日期1970-01-01打印整個時間戳作爲日期偏移量(由於缺少輸入字符串中的日期信息而被SimpleDateFormat使用)。

爲了比較時間字符串,您應該按照ISO-8601格式HH:mm:ss中按時間順序降序排列(從左到右),因此這裏進行字符串比較就足夠了。

,因爲評論的更新:

如果你只關心使用的解析是比較時間對象,然後我仍然認爲ISO格式的時間字符串的那個字符串比較是最簡單和直接的選項因爲你可以完全離開解析工作。 ISO-8601甚至已根據訂購要求定義了其時間格式「HH:mm:ss」。

如果您有更多的計劃/超越了簡單的比較用心,那麼你當然可以解析的時間字符串Date -objects和您的評論方法getTime()的基礎上,這些分析的對象比較喜歡做其他額外的東西用(醜和一半棄用)Date - 對象。

+0

找到解決方案 'Date Time1 = new Date(); Date Time2 = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(「HH:mm:ss」); String temp1 = sdf。格式(Time1);'** //獲取指定格式 'String temp2 =「09:00:00」;' 'Date d1 = sdf.parse(temp1);''輸出 - Thu Jan 01 13 :24:40 IST 1970 'Date d2 = sdf.parse(temp2);'//輸出 - Thu Jan 01 09:00:00 IST 1970 'long y = d1.getTime();'''以毫秒爲單位的時間 'long z = d2.getTime();''您將獲得以毫秒爲單位的時間 現在找到哪個更大並且轉換回來 - 'd1 = new Date(l); sdf.format(d1); ' //輸出 - 13:24:40 –

+0

@AlexMichaelRaj感謝您更深入瞭解您的動機,儘管您的代碼示例沒有完全編譯。我也更新了我的答案,向你展示了一個更簡單的選擇。但是也許你真的需要'日期'對象。 –