2016-11-21 442 views
0

我使用語言環境(例如21 11月2016)在我的Android應用程序中設置日期日期。但是,我想將該日期發送到我的API中,以「dd-MM-yyyy」(例如21-11-2016)格式發送。如何將日期日期轉換爲英文日期格式?

當我嘗試這樣做,我得到下面的異常:

java.lang.IllegalArgumentException異常:叛逆類:類java.lang.String

下面是我的代碼:

public String convertDate(String date) { 
    System.out.println("......ORIGINAL DATE....... " + date); // ......ORIGINAL DATE....... 21 11月 2016 
    String myFormat = "dd-MM-yyyy"; //In which you need put here 
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, new Locale(getMyLocale())); //Japanese locale is set but tried english too 
    System.out.println("......CONVERTED DATE....... " + sdf.format(date)); //should be 21-11-2016 but getting above error 
    return sdf.format(new Date(date)); 
} 

此外,美國/英國語言環境它工作正常,但對於日語我得到這個錯誤。

+0

爲您解析字符串,那麼你應該使用'parse'不'還有format'的'21 11月2016'格式不是'DD-MMM- yyyy' - 嘗試使用'dd MM yyyy'格式進行解析,如果那真的是你的字符串 –

+0

請參閱dd-MM-yyyy是我需要它的格式,但是在文本標籤上我設置日期如2016年11月21日 – VVB

+0

並且爲了解析我得到這個錯誤java.text.ParseException:Unparseable date:「2016年11月21日」(在偏移量11) – VVB

回答

1

java.time

您正在使用由java.time類代替的麻煩的舊的遺留日期 - 時間類。

定義DateTimeFormatter對象以匹配輸入字符串的模式,併爲日本指定Locale。將輸入字符串解析爲LocalDate對象。致電LocalDate.parse

定義一個DateTimeFormatter對象以匹配您所需的輸出。請致電LocalDate::format以生成您想要的字符串。

這已被記錄許多次已在StackOverflow中。請搜索以查找示例代碼和進一步討論。


關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

3

需要兩個格式化如下

String in = "2016年11月 21日"; // really a space here? 
    SimpleDateFormat sdf1 = new SimpleDateFormat ("yyyy年MM月 dd日"); 
    Date d1 = sdf1.parse(in); 

    SimpleDateFormat sdf2 = new SimpleDateFormat ("dd-MM-yyyy"); 

    System.out.println(sdf2.format(d1));