2012-02-10 62 views
2

我有一個字符串"12/9/2010 4:39:38 PM",我必須將其轉換爲日期對象。我使用下面的代碼來做到這一點:意外的輸出,同時在java中將字符串轉換爲日期

String str = "12/9/2010 4:39:38 PM"; 

DateFormat formatter ; 

Date date ; 

formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a"); 

date =(Date)formatter.parse(str);    

System.out.println("date printed"+date);  

然而,當IM打印輸出,我看到

週四09年12月四時39分38秒北京時間2010

如何我是否按照我在字符串中聲明的方式獲取日期,例如:

12/9/2010 4:39:38 PM

作爲輸出?請幫助

+0

爲什麼你需要轉換爲相同的格式? – kosa 2012-02-10 16:20:30

+0

'System.out.println(「date date」+ date);'是引用Date.toString()方法。這就是爲什麼打印日期的格式看起來「奇怪」,這是toString()使用的格式。如果您想以默認格式以外的方式顯示日期,則必須使用日期格式化程序(如下所示,當前所有答案)。 – DwB 2012-02-10 16:22:36

+0

@thinksteep:我在數組列表中使用字符串格式「2010年12月9日4:39:38」的這些日期。我必須找到他們最近的。所以我需要對它們進行排序。對於排序,我不能執行字符串排序。所以即時通訊將其轉換爲日期對象。然後使用自定義排序執行排序,然後在試圖打印最新日期時,其格式將變爲「Thu Dec 09 04:39:38 IST 2010」。那是我面臨的問題。現在解決了。 – 2012-02-11 07:44:09

回答

5

你假設Date價值本身記得的格式 - 它沒有。 Date.toString將做它想要的 - 因爲Date只代表一瞬間。

如果你想格式一個Date,再次使用格式化程序:

System.out.println(formatter.format(date)); 

然而,這不會一定返回在你的字符串值完全相同,因爲可能存在多個值解析相同的方式。例如,因爲您只使用過「H:m:s」,所以我希望「4:5:6」的解析方式與「04:05:06」相同。

+0

謝謝。我錯過了這一點。 – 2012-02-10 16:22:17

1

使用相同的格式:

System.out.println("date printed "+ formatter.format(date)); 
+0

謝謝。太棒了! – 2012-02-10 16:22:59

0

將其轉換回字符串中使用的SimpleDateFormat?

0
formatter = new SimpleDateFormat("MM/dd/yyyy HH:m:ss a"); 
String temp =formatter.format(date); 
+0

在問題中,字符串被解析爲日期,而不是相反。 – 2012-02-11 12:12:00

0

Java.util.Date沒有固有的格式的概念 - 你需要使用format(java.util.Date d)方法來查看您的Date對象的格式化String表示。

String str = "12/9/2010 4:39:38 PM"; 

DateFormat formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a"); 
Date date =(Date)formatter.parse(str); 

System.out.println("date printed"+formatter.format(date)); 
0

不知道你在努力完成什麼。但是你必須調用SimpleDateFormat.format()來獲得你所期望的。打印日期直接將只得到toString()實現日期

2

您可以使用類格式化

簡短的回答

String str = "12/9/2010 4:39:38 PM"; 
Formatter formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a"); 
Date date =(Date)formatter.parse(str); 
Formatter formatterOutput = new SimpleDateFormat("MM/dd/yyyy HH:m:ss a"); 
String s = formatterOutput.format(date); 

其他例子

Format formatter; 

// The year 
formatter = new SimpleDateFormat("yy"); // 02 
formatter = new SimpleDateFormat("yyyy"); // 2002 

// The month 
formatter = new SimpleDateFormat("M");  // 1 
formatter = new SimpleDateFormat("MM"); // 01 
formatter = new SimpleDateFormat("MMM"); // Jan 
formatter = new SimpleDateFormat("MMMM"); // January 

// The day 
formatter = new SimpleDateFormat("d");  // 9 
formatter = new SimpleDateFormat("dd"); // 09 

// The day in week 
formatter = new SimpleDateFormat("E");  // Wed 
formatter = new SimpleDateFormat("EEEE"); // Wednesday 

// Get today's date 
Date date = new Date(); 

// Some examples 
formatter = new SimpleDateFormat("MM/dd/yy"); 
String s = formatter.format(date); 
// 01/09/02 

formatter = new SimpleDateFormat("dd-MMM-yy"); 
s = formatter.format(date); 
// 29-Jan-02 

// Examples with date and time; see also 
// Formatting the Time Using a Custom Format 
formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); 
s = formatter.format(date); 
// 2002.01.29.08.36.33 

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z"); 
s = formatter.format(date); 
// Tue, 09 Jan 2002 22:14:02 -0500 
完全指定日期輸出的格式

from:http://www.exampledepot.com/egs/java.text/formatdate.html

+0

感謝您的詳細解釋。它確實有幫助 – 2012-02-10 18:50:32

0
public static void main(String args[]) 
{ 
     String string="2012-09-13"; 
     Date str=processFileDate(string); 
     System.out.println(str); 
} 
public static Date processFileDate(String str) 
{ //returns the date or "null" if doesn't exist 

    String[] strformat={ 
      "EEE,dd MMM yyyy","MMM dd, yyyy, hh.mmaa zzz", 
      "EEEE, MMMMM dd yyyy 'at' hh:mm", 
      "EEEE, MMMMM dd, yyyy, hh:mm", 
      "EEE MMM dd yyyy, hh:mm ", 
      "dd MMMMM yyyy'Last updated at' hh:mm zzz", 
      "MMM dd, yyyy 'at' hh:mmaa", 
      "MMM dd, yyyy 'at' hh:mmaa zzz", 
      "MMMMM dd, yyyy, hh:mm aa zzz", 
      "EEE, MMM dd, yyyy hh:mm ", 
      "MMMMM dd, yyyy hh:mm zzz", 
      "MMMM dd, yyyy hh:mm aa", 
      "MMMM dd, yyyy hh:mmaa", 
      "MMMM dd, yyyy hh:mm", 
      "dd MMMM yyyy hh:mm:ss", 
      "dd MMMM yyyy hh:mm", 
      "MMMM dd, yyyy", 
      "dd MMMM yyyy ", 
      "dd MM yy", 
      "yyyy MMMM dd", 
      "dd'st' MMMM,yyyy", 
      "dd'nd' MMMM,yyyy", 
      "dd'rd' MMMM,yyyy", 
      "MMMM dd,yyyy", 
      "MMM dd yy", 
      "mm dd yy", 
      "yyyy-MM-dd", 
      "yyyy-MM-dd HH:mm:ss", 
      "E MMM dd hh:mm:ss Z yyyy", 
      "EEE, dd MMM yyyy HH:mm:ss Z" 

    }; 

    String temp="null"; 
    for(int i=0;i<str.length();i++){ 
     temp=str.substring(i, str.length()); 
     for(int l=0;l<strformat.length;){ 
      Date strp=checkformat(temp,strformat[l]); 
      if(strp!=null) 
      { 
       return strp; 
      } 
      else l++; 
     } 
    } 
    return null; 
} 

private static Date checkformat(String str, String sdf) { 
    SimpleDateFormat sdformat=new SimpleDateFormat(sdf); 

     try{ 
     Date d=sdformat.parse(str); 
     return d; 
     }catch(Exception e){} 

     return null; 
}