按照月份名称优先的格式获取日期

时间:2018-09-11 12:40:44

标签: java date simpledateformat

我正在获取如下所示格式的字符串

03-12-2018

我想按照Java 8标准将其转换为以下格式,请告知

December 03 , 2018  

下面显示了我尝试过的方法,但是我没有成功,请告知如何达到相同的目的

SimpleDateFormat month_date = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    String actualDate = "03-12-2018";

    Date date = sdf.parse(actualDate);

    String month_name = month_date.format(date);
    System.out.println("Month :" + month_name);  

3 个答案:

答案 0 :(得分:1)

java.time

    DateTimeFormatter originalFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
    DateTimeFormatter monthFirst = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.LONG)
            .withLocale(Locale.ENGLISH);

    String actualDate = "03-12-2018";
    LocalDate date = LocalDate.parse(actualDate, originalFormatter);
    String monthName = date.format(monthFirst);
    System.out.println("Month :" + monthName);

输出:

  

月份:2018年12月3日

由于您正在使用Java 8(即使您没有使用Java 8),也请避免使用过长且臭名昭著的SimpleDateFormat类。尽可能使用内置格式,而不要滚动自己的格式。

您的代码出了什么问题?

您解析了03-12-2018格式为yyyy-MM-dd的字符串。因此,这解析为公元3年(2015年前)的第12个月的2018年。显然,十二月没有2018年的日子。因此,期待有一个例外将是公平的。这只是SimpleDateFormat遇到麻烦的要点之一:使用标准设置,它只会继续计算接下来的几个月和几年的天数,直到9年9月9日(即5年半)结束。接下来,您使用包括月份名称和年份在内的格式化程序对该日期进行了格式化,似乎您忘记了月份中的日期。无论如何,它都打印为Jun 0009(您应该在问题中告诉我们,以便我们能够找出问题所在;此信息对于尝试解决您的问题非常有帮助)。

链接

Oracle tutorial: Date Time解释了如何使用java.time

答案 1 :(得分:0)

只需选择正确的格式(并应用正确的Locale)即可。

 DateTimeFormatter f = DateTimeFormatter.ofPattern("LLLL dd, yyyy");
 System.out.println(f.format(yourDate));

它在the documentation

  

...   数字/文本:如果图案字母的数量为3个或更多,请使用上面的“文本”规则。否则,请使用上面的数字规则。   ...

答案 2 :(得分:0)

使用以下代码:

SimpleDateFormat month_date = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

String actualDate = "03-12-2018";

Date date = sdf.parse(actualDate);

String month_name = month_date.format(date);
System.out.println("Month :" + month_name);