2016-09-26 73 views
0

簡單地說,我有一個不同日期和時間的字符串數組。每個元素是這種格式:排序日期和時間值

2015-08-27T22:24:31.903

即,YYYY-MM-DD Ť HH:MM:SS.MMM

我在整理它們。是否有可用於排序此格式的默認方法?

我現在正在做的是分割字符串T,將日期和時間轉換爲相應的時間戳,添加它們,然後對時間戳值進行排序。是否有可用的此格式的直接解析器?更好的解決方案是最受歡迎的。

+0

您可以簡單地對字符串進行排序,因爲它們處於[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601#General_principles)格式,這使得它們可以輕鬆排序。不需要轉換。 – Jhonny007

回答

3

我有一個字符串數組。每個元素都是這種格式:2015-08-27T22:24:31.903。是否有可用於排序此格式的默認方法?

是的。由於ISO字符串的日期字段按大小遞減,字段爲固定寬度,因此可以使用以下方式對字符串進行簡單排序:Arrays.sort(Object[] a)根據元素的自然排序,將指定的對象數組按升序排序。

是否有可用的此格式的直接解析器?

是的。 LocalDateTime.parse(CharSequence text)從文本字符串(如2007-12-03T10:15:30)獲取LocalDateTime的實例。

+0

是這個程序可以用來排列這種格式的時間戳'2016-08-16T06:31:34Z' –

3

我認爲這些是字符串。如果你不想做明顯的事情(將它們轉換爲java.util.Datejava.time.Instant並比較結果),那麼可以將它們作爲字符串進行比較,即特定的日期時間格式(幾乎完整的ISO-8601時間戳,僅缺少時區指示符)在使用字符串比較時正常工作。

無償例子(live copy):

import java.util.*; 

class Example 
{ 
    public static void main (String[] args) 
    { 
     String[] strings = { 
      "2002-10-24T13:51:25.417", 
      "2001-03-25T23:41:24.234", 
      "2008-10-05T04:41:56.004", 
      "2013-04-10T22:14:06.852", 
      "2005-08-24T05:05:01.080", 
      "2015-11-20T17:32:27.303", 
      "2003-07-16T06:32:07.703", 
      "2005-03-20T08:28:18.440", 
      "2009-04-17T13:20:09.499", 
      "2002-11-04T06:39:55.287" 
     }; 
     Arrays.sort(strings); 
     for (String s : strings) { 
      System.out.println(s); 
     } 
    } 
} 

輸出:

 
2001-03-25T23:41:24.234 
2002-10-24T13:51:25.417 
2002-11-04T06:39:55.287 
2003-07-16T06:32:07.703 
2005-03-20T08:28:18.440 
2005-08-24T05:05:01.080 
2008-10-05T04:41:56.004 
2009-04-17T13:20:09.499 
2013-04-10T22:14:06.852 
2015-11-20T17:32:27.303 

你可以,當然,提供Comparator如果你需要一個不同的排序(如反向順序)。

0

1)將給您使用適當的SimpleDateFormat字符串:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss.SSS"); 
try { 
    Date date = formatter.parse(dateInString); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

2)存放在一個列表中的每個日期。要做到這一點,首先實例化一個新的列表...

ArrayList<Date> myDates = new ArrayList<Date>(); 

...解析命令後,每個日期添加到列表:

myDates.add(date); 

3)對它們進行排序使用:

Collections.sort(myDates); // Ascending 

Collections.sort(myDates, Collections.reverseOrder()); // Descending 
+0

不需要解析爲'日期',因爲字符串可以按原樣排序。 – Andreas