Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何格式化GregorianCalendar_Java_Date_Format_Date Formatting_Gregorian Calendar - Fatal编程技术网

Java 如何格式化GregorianCalendar

Java 如何格式化GregorianCalendar,java,date,format,date-formatting,gregorian-calendar,Java,Date,Format,Date Formatting,Gregorian Calendar,我有一个目标。如何获取格式化字符串 行System.out.print(“租赁结束:+endDate”)生成以下非常长的日历。如何将其格式设置为dd/mm/yyyy 租赁结束:java.util.GregorianCalendar[time=14950562200,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Europe/London”,offset=0,dstSa

我有一个目标。如何获取格式化字符串

System.out.print(“租赁结束:+endDate”)生成以下非常长的日历。如何将其格式设置为dd/mm/yyyy

租赁结束:java.util.GregorianCalendar[time=14950562200,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,dstSaves=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=1,startDayOfWeek=1,startDayOfWeek=1,startDayOfWeek=3600000,startTimeMode=2,endMode=2,endMonth=9,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],周的第一天=2,周的第一天=4,纪元=1,年=2017,月=4,年的周=20,月的周=3,月的日=17,年的日=137,周的日=4,月的周的日=3,上午下午=1,小时=8,日的小时=20,分钟=50,秒=25,毫秒=200,分区偏移=0,DST偏移=3600000]
tl;dr 2017年1月23日

细节 从麻烦的遗留类
gregoriacalendar
转换为现代java.time类.Call,以标准格式生成文本

得到这样的结果:

2017-01-23T12:34:56.789-07:00[美国/洛杉矶]

对于您的日期,请使用自定义格式模式

endDate.toZonedDateTime()
       .format( DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
2017年1月23日


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)


该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如、、。

@Basil Bourque的答案是极力推荐的。我只想用java 6和7的答案来补充它(因此,如果您使用的是Java 8或更高版本,请忽略)。此外,如果您可以完全避免使用
Calendar
类,这是最好的,您应该使用另一个答案。在下文中,我假设您无法避免从某些旧API获得一个
Calendar
对象,您现在无法更改或不想更改该对象

java.time和三百一十个后端口 我举了一个重复问题的例子,如何将日历对象转换为如下所示的日期格式(底部的链接)

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

问题:我可以在Java7上使用java.time吗? 是的,java.time在Java7中运行得很好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
  • 在(较旧的)Android上,使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保您使用子包从
    org.ThreeTen.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口
到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻
  • 重复的问题是提供这一答案的时机

  • 你应该检查
    java.util.GregorianCalendar
    的文档,这个网站上必须有50个Q/A的日期格式。但是,例如,检查一下。@KevinO实际上,我找了一个重复的问题,但找不到一个专门询问如何格式化
    GregorianCalendar
    。所以我写了一个答案。如果你能找到一个重复的问题cate,请将此问题标记为重复问题,我将投票与您一起结束。可能重复的@Matthias不是重复问题。该问题主要是关于将字符串解析为
    GregorianCalendar
    对象,而此问题以手中的
    GregorianCalendar
    对象开始。引用:“将日期字符串转换为GregorianCalendar对象”、“从文件中提取文本并将其分解”、“convertFromDMY”亲爱的Down投票者:请在投票时留下批评意见。嘿,我一直在玩
    java.time
    很久了,还没有发现这种转换,介于
    GregoriaCalendar
    ZoneDateTime
    之间。这是一件很自然的好事,因为这些类在预期用途上很匹配。相反的转换是sion作为
    GregorianCalendar.from(ZoneDateTime)存在
    。感谢这个消息,不管它是旧消息。@OleV.V.是的,这种转换途径并不明显,因为这些方法只存在于具体的
    GregorianCalendar
    类中,而不存在于常用的
    Calendar
    抽象类中。如果手头有
    Calendar
    对象,则必须使用
    instanceOf进行测试
    要验证它实际上是一个
    gregoriacalendar
    ,请强制转换它,然后调用转换方法。
    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);