SimpleDateFormat,需要textual Month

时间:2012-02-06 20:24:48

标签: java string parsing date simpledateformat

我将其作为字符串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返回给我的数字相匹配,但我很好奇。

如何让它适合我,谢谢!

6 个答案:

答案 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);