将字符串转换为Java中的日历对象

我是Java新手,通常使用PHP。


我正在尝试转换此字符串:


2011年3月14日星期一格林尼治标准时间16:02:37


放入Calendar对象,这样我就可以像这样轻松地提取Year和Month:


String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);

手动解析它不是一个好主意吗?使用子串方法?


任何建议将帮助谢谢!


慕村9548890
浏览 457回答 3
3回答

慕田峪9158850

现代方法使用java.time类。YearMonth.from(    ZonedDateTime.parse(         "Mon Mar 14 16:02:37 GMT 2011" ,         DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )     )).toString()2011-03避免使用旧的日期时间类现代方法是使用java.time类。诸如此类的旧日期时间类Calendar已被证明设计不良,令人困惑和麻烦。定义一个自定义格式化程序以匹配您的字符串输入。String input = "Mon Mar 14 16:02:37 GMT 2011";DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );解析为ZonedDateTime。ZonedDateTime zdt = ZonedDateTime.parse( input , f );您对年度和月份感兴趣。java.time类包括YearMonth用于该目的的类。YearMonth ym = YearMonth.from( zdt );您可以根据需要询问年和月的数字。int year = ym.getYear();int month = ym.getMonthValue();但是该toString方法会生成标准ISO 8601格式的字符串。String output = ym.toString();全部放在一起。String input = "Mon Mar 14 16:02:37 GMT 2011";DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );ZonedDateTime zdt = ZonedDateTime.parse( input , f );YearMonth ym = YearMonth.from( zdt );int year = ym.getYear();int month = ym.getMonthValue();转储到控制台。System.out.println( "input: " + input );System.out.println( "zdt: " + zdt );System.out.println( "ym: " + ym );输入:2011年3月14日星期一格林尼治标准时间zdt:2011-03-14T16:02:37Z [GMT]ym:2011-03现场代码请参阅在IdeOne.com中运行的代码。转换次数如果必须有一个Calendar对象,则可以GregorianCalendar使用添加到旧类的新方法转换为。GregorianCalendar gc = GregorianCalendar.from( zdt );关于java.time该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat。现在处于维护模式的Joda-Time项目建议迁移到java.time。要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。在哪里获取java.time类?Java SE 8和 SE 9及更高版本内置的标准Java API的一部分,具有捆绑的实现。Java 9添加了一些次要功能和修复。Java SE 6和 SE 7java.time的许多功能在ThreeTen- Backport中都被反向移植到Java 6和7 。安卓系统所述ThreeTenABP项目适应ThreeTen-反向移植为Android(上面提到的)特异性。请参阅如何使用…。该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多。

慕村225694

好吧,我认为复制像这样的类中已经存在的代码将是一个坏主意SimpleDateFormat。在另一方面,我个人会建议避免Calendar和Date完全如果可以的话,并使用约达时间,而不是作为一个更好的设计的日期和时间API。例如,你需要知道,SimpleDateFormat是不是线程安全的,所以你要么需要线程本地人,同步,或一个新实例每次使用它的时候。Joda解析器和格式化程序是线程安全的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

AngularJS