2014-10-10 67 views
0

我想格式化日期格式爲1990年3月1日。日期應格式化爲YYYY-MM-DD。我有以下代碼。它給了我一個不可分割的日期。從這我可以理解,這不是正確的方式來格式化這個日期,因爲它不是一個有效的模式。如何將具有序號格式的日期轉換爲1994年3月1日?

public class DateFormattingTest { 
    public static void main(String[] args) throws ParseException { 
     String dateString = "1st March 1984"; 

     dateString = dateString.replaceFirst("[a-zA-Z]{2}","") ; 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d MMMM yyyy"); 
     Date rightNow = simpleDateFormat.parse(dateString); 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     String formattedDate = dateFormat.format(rightNow); 
     System.out.println(formattedDate); 
    } 
} 

我修改了並查找了日期格式化模式。 「1990年3月1日」我找不到與這種模式有關的東西。我不希望這個問題的示例代碼。我想知道我在這裏做錯了什麼?有人可以提出一種解析這種日期的方法嗎?

謝謝。

+0

夥計們,我已經添加了代碼並更新了我的問題主題,如果有人在同一個問題上發現問題。 – benz 2014-10-10 20:06:51

回答

3

你有三個問題。

  • 首先,你要解析使用格式YYYY-MM-DD日期。這不是數據的格式,這就是解析失敗的原因。
  • 其次,您期望Date對象保留有關特定格式的信息。它沒有。相反,您將從一個文本格式解析爲Date,然後使用另一個DateFormat(具有所需的輸出格式)將Date格式化爲String。無論您如何抵達DateDate.toString()將始終使用相同的格式。
  • 三,YYYY-MM-DD的格式並不是你想要的 - 你想要yyyy-MM-ddYYYY是「週年」,而DD是「年中的一天」。

我不知道任何SimpleDateFormat方法,它能夠處理你的輸入字符串的順序部分(「第一」,「第二」等) - 你可能需要把一些工作進入汽是出。一旦得到諸如「1990年3月1日」的值,則可以使用d MMMM yyyy的模式來解析SimpleDateFormat。確保您適當地設置時區和區域設置。

+1

由於模式的特點是順序標記是字符串中的第一個字母,我認爲它們可以通過'dateString.replaceFirst(「[a-zA-Z] {2}」,「」)' – RealSkeptic 2014-10-10 19:54:40

+1

@ RealSkeptic:是的,如果假定這個值是正確的,那應該是正確的。] – 2014-10-10 19:56:39

+0

@RealSkeptic,我差不多在這裏,讓我檢查一下這個正則表達式替換。這個網站真棒。 – benz 2014-10-10 19:59:01

0

問題是您的dateString與您的simpleDateFormat格式中指定的模式不匹配。它預計格式爲YYYY-MM-DD的日期,這些符號的含義可以找到here

1

您的日期1st未被納入Java DateFormat。如果您可以切換到1並使用相應的DateFormat,則日期的解析將起作用,否則您需要通過剝離suffixordinal number轉換爲numberThis可能是一個很好的相關帖子來偷看。

+0

Piyush,你轉換爲序號的意思是什麼?在java中沒有格式,照顧序數。 – benz 2014-10-10 19:56:52

+0

@benz:我的意思是相反,將序號轉換爲數字。已編輯我的帖子。 – 2014-10-10 20:02:21

相關問題