Java:将字符串日期转换为月份名称年份(MMM yyyy)

我是Java新手。 我正在尝试将日期从字符串转换为MMM yyyy格式(2016年3月)。 我试过这个

Calendar cal=Calendar.getInstance(); SimpleDateFormat month_date = new SimpleDateFormat("MMM yyyy"); String month_name = month_date.format(cal.getTime()); System.out.println("Month :: " + month_name); //Mar 2016 

它工作正常。 但是当我使用时

 String actualDate = "2016-03-20"; 

它不起作用。 帮助我,如何解决这个问题。

您的格式必须与您的输入相符

2016-03-20

格式应该是(只使用第二个SimpleDateFormat对象)

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 

完整答案

 SimpleDateFormat month_date = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String actualDate = "2016-03-20"; Date date = sdf.parse(actualDate); String month_name = month_date.format(date); System.out.println("Month :" + month_name); //Mar 2016 

使用java.time java-8

 String actualDate = "2016-03-20"; DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH); DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("MMM yyyy", Locale.ENGLISH); LocalDate ld = LocalDate.parse(actualDate, dtf); String month_name = dtf2.format(ld); System.out.println(month_name); // Mar 2016 

TL;博士

 YearMonth.from( LocalDate.parse( "2016-03-20" ) ) .format( DateTimeFormatter.ofPattern( "MMM uuuu" , Locale.US ) ) 

2016年3月

java.time

避免麻烦的旧日期时间课程。 完全取代了java.time类。

YearMonth

Java有一个表示年份和月份的类。 奇怪的名字, YearMonth

 LocalDate ld = LocalDate.parse( "2016-03-20" ) ; YearMonth ym = YearMonth.from( ld ) ; 

定义所需输出的格式模式。

指定LocaleLocale确定(a)用于翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大小写,标点符号,分隔符等问题的文化规范。

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM uuuu" , Locale.US ) ; String output = ym.format( f ) ; 

2016年3月

您可以在LocalDate上使用该格式化程序。 但我认为你可能还需要将年月作为一个概念,因此YearMonth课程可能会有用。


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。

您可以直接与数据库交换java.time对象。 使用符合JDBC 4.2或更高版本的JDBC驱动程序 。 不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

  • Java SE 8Java SE 9Java SE 10及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6Java SE 7
    • 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
  • Android的
    • 更高版本的Android捆绑java.time类的实现。
    • 对于早期的Android(<26), ThreeTenABP项目采用ThreeTen-Backport (如上所述)。 请参见如何使用ThreeTenABP ….

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如IntervalYearWeekYearQuarter等。

试试这段代码:

  DateFormat df = new SimpleDateFormat("dd-MMMM HH:mm a"); Date date = new Date(System.currentTimeMillis()); String infi = df.format(date); 

输出应该是:

  11-May 4:47 PM