有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何格式化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]

共 (2) 个答案

  1. # 1 楼答案

    强烈推荐@Basil Bourque的答案。我只想补充一下Java6和Java7的答案(因此,如果您使用的是Java8或更高版本,请忽略)。另外,如果您可以完全避免使用Calendar类(这是最好的),那么您应该使用另一个答案。在下面的例子中,我假设您无法避免从某个遗留API获得一个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);
    

    本例中的输出是所需的:

    7/23/2019 11:02:11 AM

    问题:我可以使用java吗。Java 7上的时间

    是的,java。时间在Java 7中运行得很好。它至少需要Java6

    • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
    • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
    • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类

    链接

  2. # 2 楼答案

    tl;博士

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

    23/01/2017

    细节

    从麻烦的遗留类GregorianCalendar转换为现代java。时间类^{}。调用^{}以生成标准ISO 8601格式的文本

    endDate.toZonedDateTime().toString()
    

    得到这样的结果:

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

    对于您的约会,请使用^{}Specify自定义格式模式

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

    23/01/2017


    关于java。时间

    java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如^{}^{}、&^{}

    现在位于maintenance modeJoda-Time项目建议迁移到java.time

    要了解更多信息,请参阅Oracle Tutorial。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310

    在哪里可以获得java。时间课

    Table of which java.time library to use with which version of Java or Android

    {a25}项目扩展了java。额外上课的时间。这个项目是将来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,例如^{}^{}^{}more