关于java:如何格式化GregorianCalendar

How can I format a GregorianCalendar

我有一个GregorianCalendar物体。如何获取格式化字符串?

System.out.print("End of rental:" + endDate);行生成以下非常长的日历。如何将此格式设置为dd/mm/yyyy?

1
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]


DR

1
2
endDate.toZonedDateTime()
       .format( DateTimeFormatter.ofPattern("dd/MM/uuuu" ) )

23/01/2017

号细节

GregorianCalendar的麻烦遗留类转换为ZonedDateTime的现代java.time类。调用toString生成标准ISO 8601格式的文本。

1
endDate.toZonedDateTime().toString()

得到这样的东西:

2017-01-23T12:34:56.789-07:00[America/Los_Angeles]

就你的约会而言,使用DateTimeFormatter。指定自定义格式模式。

1
2
endDate.toZonedDateTime()
       .format( DateTimeFormatter.ofPattern("dd/MM/uuuu" ) )

23/01/2017

号关于java.time

JavaTimeFr框架是在Java 8和之后构建的。这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendar、&SimpleDateFormat

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

要了解更多信息,请参阅Oracle教程。以及搜索堆栈溢出以获得许多示例和解释。规格为JSR 310。

在哪里获取java.time类?

  • Java SE 8、Java SE 9及以后
    • 内置。
    • 标准JAVA API的一部分与捆绑实现。
    • Java 9增加了一些次要的特性和修复。
  • Java SE 6和Java SE 7
    • 大部分JavaTimeActudio都被移植到TealEnter后端的Java 6和7中。
  • 安卓
    • threetenabp项目专门为Android调整threeten backport(如上所述)。
    • 看看如何使用三连珠……

threeten额外项目使用额外的类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等等。