我将其作为字符串02/06/2012 1:25 PM EST
我想使用SimpleDateFormat返回" 2月"从该数据
这是我试过的
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();
}
不幸的是,当SimpleDateFormat文档说它应该有效时,gottenDate.parse("02/06/2012 1:25 PM EST")
会得到一个解析异常。
如果我使用两个M而不是3来SimpleDateFormat gottenDate = new SimpleDateFormat("MM");
,则返回" 02"对我来说,正如所料。文件说3个或更多的M应该返回一个文本月份。这不会发生,为什么?是的,到现在为止,我可以制作一个数月的字符串数组,并将它们与SDF返回给我的数字相匹配,但我很好奇。
如何让它适合我,谢谢!
答案 0 :(得分:2)
在您的情况下预计会出现异常:
SimpleDateFormat gottenDate = new SimpleDateFormat("MMM");
gottenDate.parse("02/06/2012 1:25 PM EST");
如果匹配“MMM”模式,“gottenDate”被设置为解析字符串。以下应该有效:
SimpleDateFormat gottenDate = new SimpleDateFormat("MMM");
gottenDate.parse("Feb");
希望你能看到这里发生了什么。
答案 1 :(得分:0)
您需要一种格式来解析日期:MM/dd/yyyy
,一旦您拥有第一个日期格式的Date对象,您需要第二个格式:MMM
,以根据需要格式化日期
使用MM
格式化将为您提供两位数的月份,使用MMM
进行解析将需要缩短的文字月份,并且不会解析02
。
答案 2 :(得分: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();
}
不确定源字符串的格式,复杂的格式字符串有点棘手。
答案 3 :(得分:0)
这是为您提供月份名称的代码:
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");
<强>输出:强>
Feb
答案 4 :(得分: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
答案 5 :(得分: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);