2012-12-30 16 views
3

我有一個String實例作爲以下格式:爲分割日期字符串提出了哪種方法?

yyyyMMddHHmmss 

,我希望它的任何元件被劃分爲整數變量。樣品:

String date_time = "20080519145436"; 

通過上面的字符串結果必然是:

int year = 2008; 
int month = 05; 
int day = 19; 
int hour = 14; 
int minutes = 54; 
int second = 36; 

我發現了兩個方法用於解決此問題:使用SimpleDateFormatter

  1. 和獲取的元素。
  2. 使用subString()方法String類。

我的問題是:建議哪種方式?還有其他的方法嗎?

回答

7

JodaTime中使用日期格式化機制。

例如:

final DateTimeFormatter parser = DateTimeFormat.forPattern ("yyyyMMddHHmmss"); 
final DateTime date = parser.parseDateTime("20080519145436"); 
int year = date.getYear(); 
... 
+0

感謝您的回答。沒有額外的圖書館有簡單的方法嗎? – MJM

+0

性能好嗎? – MJM

+0

JodaTime的表現非常好。當然,如果要在課堂或方法中多次使用格式化程序,則需要預先創建格式程序。 – Andrew

0

另一種方式是

long d = Long.parseLong("20080519145436"); 
    int year = (int) (d/10000000000L); 
    int month = (int) (d/100000000L % 100); 
    int day = (int) (d/1000000L % 100); 
    int hour = (int) (d/10000L % 100); 
    int minutes = (int) (d/100L % 100); 
    int second = (int) (d % 100); 

作爲選項,我認爲#2是更快

int year = Integer.parseInt(date_time.substring(0, 4)); 
... 

因爲SimpleDateFormat是一個已知慢。

2

,你可以簡單地使用SimpleDateFormat的

String date_time = "20080519145436"; 
     SimpleDateFormat df =new SimpleDateFormat("yyyyMMddHHmmss"); 
     Date d= df.parse(date_time); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(d); 
     System.out.println(cal.get(Calendar.YEAR)); 
2

甚至不考慮使用String.subString()。一個日期不是一個字符串,你不應該嘗試把它作爲一個字符串來處理,因爲你將不會對你的輸入進行完整性檢查。你可以輸入任何14位數字的輸入,並且你的算法會把它分成無意義的日期部分,比如month = 42。使用SimpleDateFormatter,JodaTime或任何其他專門用於日期對象的算法將在這種情況下引發異常。

0

使用SimpleDateFormatter和獲取元素。