2012-05-28 47 views
1

我有這種格式的日期2009-09-17T00:00:00.000-35:00。根據我申請的業務規則,我寫了3個方法,它們將接受這個日期並以MM/yyyy,yyyyMM和dd的形式返回日期。返回3種格式的數據的方法

例如下面示出MM一個方法/ YYYY

private String getMonthYear(String date) throws Exception { 
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); 
     String s1 = date; 
     String s2 = null; 
     Date d; 
     try { 
      d = sdf.parse(s1); 
      s2 = (new SimpleDateFormat("MM/yyyy")).format(d); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return s2; 
    } 

同樣我有另外兩種方法,這將在YYYYMM和DD格式返回數據△φ

這工作得很好,但並不好看

我的問題是可以,我們只有一個工具,它滿足我的要求?

+0

您是否找到可以接受的答案? – Justin

回答

2

您可以定義一個方法並接收帶有預期日期格式的字符串作爲參數,這三個格式的字符串可以定義爲常量。

3

我的問題是我們可以只有一個工具滿足我的要求??

我認爲你會以這種錯誤的方式開始。基本上數據僅爲,日期爲。您可以稍後在需要時應用格式。我建議你開始使用Joda Time並讓你的方法返回LocalDate。這將捕獲所有真實信息,然後您可以隨時使用三個單獨的DateTimeFormatter對象來隨時格式化該值。

無論你在哪裏,都可以用最自然代表真實信息的類型表示數據。儘早將數據轉換爲自然格式,並將其保存爲該格式,直到將其轉換爲其他內容(如字符串)爲

+1

+1。我更喜歡你的答案。 –

+1

@Downvoter:關心評論? –

0

是的,你可以將三個方法組合在一起,並使用一個額外的參數(例如枚舉)來指定你想要的輸出格式。但我不會那樣做。你的解決方案更清潔。你爲什麼覺得它看起來不好?

然而,我會做的是將字符串轉換爲日期,並且使用日期而不是字符串,然後使用3種方法之一轉換日期(這需要一個日期爲參數而不是字符串)。

0

你可以只有一個Date類有三個方法。如下圖所示:

public class MyDate { 

    private String date = null; 

    public MyDate(String date) { 
     this.date = date; 
    } 

    public String getMonthYear() { 
     return null; 
    } 

    public String getYearMonth() { 
     return null; 
    } 

    public String getDay() { 
     return null; 
    } 
} 

您可以將字符串格式化成在構造函數中三個不同的字符串,就回到在方法調用這些字符串。如果您在同一日期字符串上進行號碼/重複呼叫,那麼該實現將會很好。或者你可以在方法調用中對字符串進行格式化,如果你只做了一次,但是如果你想要讓類/方法變爲靜態並且除掉構造函數的話。

0

Apache Commons Lang庫已經有實用的方法來爲你做到這一點。 例如:

import org.apache.commons.lang.time.DateFormatUtils; 
import org.apache.commons.lang.time.DateUtils; 
/// 
// first, convert the string to a date object 
Date parsedDate = DateUtils.parseDate("2012-05-25T16:10:30.000", 
             new String[] {"yyyy-MM-dd'T'HH:mm:ss.SSS"}); 

// now, format the date object to a string, using different formats 
String formattedDate = DateFormatUtils.format(parsedDate, "MM/yyyy"); 
String formattedDate2 = DateFormatUtils.format(parsedDate, "yyyyMM"); 

看看DateFormatUtilsDateUtils以獲取更多信息。