2012-02-06 49 views
1

我有這個作爲一個字符串02/06/2012 1:25 PM ESTSimpleDateFormat的,需要文本月

我想使用的SimpleDateFormat從數據中

回到這裏「二月」是什麼,我試圖

SimpleDateFormat gottenDate = new SimpleDateFormat("MMM"); 
      String month = ""; 
      try { 
       month = gottenDate.format(gottenDate.parse("02/06/2012 1:25 PM EST")); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

不幸的是gottenDate.parse("02/06/2012 1:25 PM EST")當SimpleDateFormat文檔說它應該工作時會得到一個分析異常。

如果我用兩個M而不是3來做SimpleDateFormat gottenDate = new SimpleDateFormat("MM");,它會像我們預料的那樣爲我返回「02」。文件說3個或更多的M應該返回一個文本月份。這不會發生,爲什麼?是的,現在我可以做一個數月的字符串並將它們匹配到爲我返回的數月SDF,但我很好奇。

我該如何讓它爲我工作,謝謝!

回答

2

異常是預期在您的情況:

SimpleDateFormat gottenDate = new SimpleDateFormat("MMM"); 
gottenDate.parse("02/06/2012 1:25 PM EST"); 

「gottenDate」設置是否匹配「MMM」模式解析字符串。下面應該工作:

SimpleDateFormat gottenDate = new SimpleDateFormat("MMM"); 
gottenDate.parse("Feb"); 

希望你可以看到是怎麼回事。

+0

我現在明白了。不幸的是,我得到的日期實際上是通過該方法傳遞的,它的格式是「02/06/2012 1:25 PM EST」,我猜我只會做出相應的月份來告訴它什麼'02 '意思是 – CQM 2012-02-06 20:36:00

+1

不一定。你可以將它作爲一個兩步過程:1)*使用一個已知模式的SimpleDateFormat實例解析*字符串; 2)一旦你得到一個Date對象 - *格式*它使用另一個SimpleDateFormat實例,如新的SimpleDateFormat(「MMM」)。 – 2012-02-06 20:40:02

0

您需要一種格式來解析日期:MM/dd/yyyy,並且一旦您從第一個日期格式中獲得Date對象,則需要第二個日期對象:MMM,以根據需要格式化日期。

格式化爲MM會給你兩位數的月份,並且使用MMM進行解析會得到縮寫的文本月份,並且不會解析02

0

您需要使用相應的格式字符串來解析源日期和格式化它放回短短的一個月形式兩個獨立SimpeDateFormat實例。您的格式實例無法解析完整日期,因爲它只需指定字符串中的月份。

SimpleDateFormat monthDate = new SimpleDateFormat("MMM"); 
SimpleDateFormat gottenDate = new SimpleDateFormat("dd/MM/yyyy h:mm a z"); 
String month = ""; 
try { 
    month = monthDate .format(gottenDate.parse("02/06/2012 1:25 PM EST")); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

不確定你的源字符串的格式,複雜的格式字符串有點棘手。

0

這是代碼,將讓MONTHNAME你:

public String getMonthName(String dtstr, String fmt) throws ParseException { 
    SimpleDateFormat gottenDate = new SimpleDateFormat(fmt); 
    SimpleDateFormat month = new SimpleDateFormat("MMM"); 
    Date dt = gottenDate.parse(dtstr); 
    return month.format(dt); 
} 

這樣稱呼它:

System.out.println(getMonthName("01/06/2012 1:25 PM EST"), "M/d/y"); 

OUTPUT:

Feb 
0

好,其他人更快回答,但我認爲這會做你想做的。

String date_str = "02/06/2012 1:25 PM EST"; 
SimpleDateFormat in_format = new SimpleDateFormat("MM/dd/yyyy h:mm aa zzz"); 
SimpleDateFormat out_format = new SimpleDateFormat("MMM"); 
Date my_date = in_format.parse(date_str); 
String out_str = out_format.format(my_date); 
System.out.println(out_str); // Prints Feb 

由於人們在不同的記錄時間的方式,日期和時間會變得複雜。我發現對於理解這一切最好的參考就是在這裏: http://www.odi.ch/prog/design/datetime.php

0

只是提供一個替代的解決方案,因爲你的工作是「提取物」日期的一個月,我覺得Calendar最適合的工作。

// Construct a Date object 
final DateFormat df = new SimpleDateFormat("M/d/y"); 
final Date originalDate = df.parse("02/06/2012 1:25 PM EST"); 

final Calendar c = Calendar.getInstance(); 
c.setTime(originalDate); // set the calendar Date 
// Extract the month 
String month = c.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US); 
System.out.println(month);