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 ) ;
定义所需输出的格式模式。
指定Locale
。 Locale
确定(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.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
您可以直接与数据库交换java.time对象。 使用符合JDBC 4.2或更高版本的JDBC驱动程序 。 不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
- Java SE 8 , Java SE 9 , Java SE 10及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和Java 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的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。
试试这段代码:
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
- Java代理发现机器人
- 将JSON反序列化为现有对象(Java)
- 启动/暂停/恢复/暂停…由其他类调用的方法
- Spring-Boot无法在WAR文件中查找JSP页面
- 有没有办法安装jar本地gradle存储库,因为它在mave中(maven install:install-file
- Spring core 3.2.2 + Spring security 3.1.4:java.lang.IncompatibleClassChangeError:org.springframework.asm.ClassVisitor
- 为什么’bodyPart.isMimeType(“text / plain”)’给出错误’无法加载bodystructure’?
- 获取Servlet Context的不同方法
- 如何查找Java String是否包含X或Y并包含Z.