我有一个GregorianCalendar
个对象。如何获取格式化字符串?
行System.out.print("End of rental: " + endDate);
生成以下非常长的日历。如何将其格式化为dd / mm / yyyy?
End of rental: java.util.GregorianCalendar[time=1495050625200,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=20,WEEK_OF_MONTH=3,DAY_OF_MONTH=17,DAY_OF_YEAR=137,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=50,SECOND=25,MILLISECOND=200,ZONE_OFFSET=0,DST_OFFSET=3600000]
答案 0 :(得分:2)
endDate.toZonedDateTime()
.format( DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
23/01/2017
从麻烦的遗留类GregorianCalendar
转换为现代java.time类ZonedDateTime
。致电toString
以生成标准ISO 8601格式的文字。
endDate.toZonedDateTime().toString()
得到这样的东西:
2017-01-23T12:34:56.789-07:00 [美国/洛杉矶]
仅限日期,请使用DateTimeFormatter
。 Specify您的自定义格式设置模式。
endDate.toZonedDateTime()
.format( DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
23/01/2017
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:2)
@Basil Bourque的答案。我想补充一下Java 6和7的答案(因此,如果您使用的是Java 8或更高版本,请忽略。)另外,如果可以完全避免使用Calendar
类,那最好,您应该使用其他答案。在下文中,我假设您无法避免从某些无法更改或不想立即更改的旧版API获取Calendar
对象。
我以一个重复的问题为例,该问题是如何将Calendar对象转换为如下所示的日期格式(底部的链接)。所需的格式为
7/23/2019 11:02:11 AM
我们可以通过以下方式获得。首先,我们实例化一个格式化程序:
private static final DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("M/d/u h:mm:ss a", Locale.ENGLISH);
然后我们像这样使用它
Calendar cal = getCalendarFromLegacyApi();
ZonedDateTime zdt = DateTimeUtils.toZonedDateTime(cal);
String howItShouldLook = zdt.format(formatter);
System.out.println(howItShouldLook);
在此示例中的输出是所需的:
2019/7/23上午11:02:11
是的,java.time在Java 7上运行良好。它至少需要 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。