2017-12-18 225 views
-1
獲得所需的日期格式

我的方法是:如何使用SimpleDateFormat的

public String changeCurrentDate(Integer variant){ 
    String currentTime = TestApp.getInstance().getDriver().findElement(By.id("common.HeaderComponent.mainLayout.serverTimeLabel")).getText(); 
    String currentDate = currentTime.substring(0, 10); 
    System.out.println("currentDate " +currentDate); 
    String date = null; 
    DateFormat df = new SimpleDateFormat("dd/mm/yyyy"); 
    try{ 
     Date date3 = df.parse(currentDate); 
     df.format(date3); 
     System.out.println("date3 " +date3); 
     Date previousDate = DateUtils.addDays(date3, variant); 
     date = previousDate.toString(); 
     return date; 
    }catch (Exception e){ 
    } 
    return date; 
} 

注:currentTime的變量總是有一個像「18/12/2017」 我期待日期的結果DD值/ mm/yyyy格式。但它總是給這樣的「Wed Jan 18 00:12:00 IST 2017」。

運行時間結果:

currentDate 18/12/2017 
date3 Wed Jan 18 00:12:00 IST 2017 
+1

日期自理不在調用'df.format(date3)'時,在java中有格式;'此方法將返回一個由SimpleDateFormat格式化的String,但它根本不會改變有關'date3'的任何內容。所以調用格式而不做任何事情的返回值是毫無意義的。 –

+1

你爲什麼認爲'mm'代表月份? – Tom

+0

我建議你不要使用過時的'Date'類,特別是避免出現臭名昭着的'SimpleDateFormat'類。 ['java.time',現代Java日期和時間API](https://docs.oracle.com/javase/tutorial/datetime/)非常適合使用。 –

回答

1

您應該返回格式化日期,而不是日期的toString()。試試這個:

Date previousDate = DateUtils.addDays(date3, variant); 
return df.format(previousDate); 
0

df.format簡單地返回應用了格式的日期的字符串表示,因此,你在你的代碼有行沒有任何影響。

試着改變你的代碼中使用的格式輸出,而不是:

public String changeCurrentDate(Integer variant){ 
    String currentTime = TestApp.getInstance().getDriver().findElement(By.id("common.HeaderComponent.mainLayout.serverTimeLabel")).getText(); 
    String currentDate = currentTime.substring(0, 10); 
    System.out.println("currentDate " +currentDate); 
    DateFormat df = new SimpleDateFormat("dd/mm/yyyy"); 
    Date date3 = df.parse(currentDate); 
    System.out.println("date3 " + df.format(date3)); 
    Date previousDate = DateUtils.addDays(date3, variant); 
    return previousDate.toString(); 
} 

而且 - 其糟糕趕上例外,所以你應該刪除。

0

我們應該總是試圖找出更方便的方法,以便我們能夠進一步使用它。在這種情況下,我們可以使用下面的方法:

public String dateString(String input) {   
    SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); 
    String formattedDate = "";   
    try { 
     Date date = parser.parse(input); 
     SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
     formattedDate = formatter.format(date);   
    } catch (ParseException e) {    
     e.printStackTrace(); 
    } 

    return formattedDate; 
} 

您可以輕鬆地調用這個方法象下面這樣:

Date date3 = df.parse(currentDate); 
df.format(date3); 

String input = date3.toString();    
String requiredDate = dateString(input); 

System.out.println("requiredDate: "+ requiredDate); 

它返回輸出象下面這樣:

requiredDate: 18/12/2017 
+0

@ChathuNM嘿兄弟!你不想使用更方便和可重用的方法嗎?如果是這樣,那麼你可以再次思考和決定。 –

+0

我強烈建議更方便的方式通過現代Java日期和時間API java.time。 –