Java 如何识别日期格式?

Java 如何识别日期格式?,java,date,calendar,Java,Date,Calendar,1) 如果我打印出日历对象,我会得到: java.util.GregorianCalendar[time=15675353679,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“GMT”,offset=0,dstSaves=0,useDaylight=false,transitions=0,lastRule=null],周的第一天=1,周的第一天=1,纪元=1,年=20

1) 如果我打印出日历对象,我会得到:
java.util.GregorianCalendar[time=15675353679,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“GMT”,offset=0,dstSaves=0,useDaylight=false,transitions=0,lastRule=null],周的第一天=1,周的第一天=1,纪元=1,年=2019,月=8,年的周=36,月的周=1,月的日=3,年的日=246,周的日=3,月的周的日=1,上午下午=1,小时=6,日的小时=18,分钟=29,秒=13,毫秒=679,分区偏移=0,DST偏移=0]

2) 如果我打印出日期对象,我会得到:

2019年9月3日星期二18:29:13 GMT

3) 但是,我正在检查生成的XML,并观察以下格式:

2014-02-28 08:00:00.000Z

我在XML中看到的是哪种格式?

日期时间对象没有“格式” 如何识别日期格式

日期时间对象没有“格式”。每个类都定义了自己的内部存储日期时间值的机制。这种机制通常与我们无关。这个类的API,这个类做出的承诺,才是最重要的

您可能将日期时间对象生成的文本与日期时间对象本身合并。日期时间类可以解析文本作为其实例化的一部分。日期和时间类可以生成文本来表示它们的值。但是文本和对象是分开的和不同的

避免
日历
如果我打印出日历对象,我会得到:

Calendar::toString
方法只是其许多内部字段的数据转储。显然,这只是为了调试,否则就没用了

该类及其常用的子类现在都是。多年前,随着JSR310的采用,java.time类取代了它们。永远不要使用它们
GregoriaCalendar
ZoneDateTime
特别替换

避免日期 如果我打印出日期对象,我会得到:

方法在于。该方法在生成文本时动态应用JVM的当前默认时区。
java.util.Date
实际上代表UTC中的一个时刻,而不是
toString
结果中的时区。此反功能是从不使用
Date
的众多原因之一

java.util.Date
类被
java.time.Instant
替换,它也表示UTC中的一个时刻,但分辨率更高,为纳秒而不是毫秒

ISO 8601 但是,我正在检查生成的XML,并观察以下格式:

2014-02-28 08:00:00.000Z

标准中定义了该文本的格式。本标准被明智地设计为以文本形式表示各种数据交换的日期时间值。该标准取代了早期定义不清的日期-时间文本格式,如早期电子邮件协议中的格式

默认情况下,java.time类在解析/生成字符串时使用格式

当前时刻(UTC) 要捕获UTC中的当前时刻,请使用
Instant

Instant instant = Instant.now() ;  // Capture the current moment in UTC.
以标准ISO 8601格式生成表示该值的文本。末尾的
Z
表示UTC,发音为“Zulu”

2020-01-23T12:34:56.123456Z

解析这样的字符串

Instant instant = Instant.parse( "2020-01-23T12:34:56.123456Z" );
时区 通过墙上的时钟看到同一时刻特定地区、时区的人们使用的时间

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
通过在方括号中添加时区名称,以明智地扩展ISO 8601标准的格式生成字符串

String output = zdt.toString() ;
看这个

instant.toString():2020-01-23T12:34:56.123456Z

zdt.toString():2020-01-23T07:34:56.123456-05:00[美国/蒙特利尔]

Java中的日期时间类型


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

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

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

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android( 我在XML中看到的是哪种格式

      XML格式的灵感来源于,如

      3.2.7.1词汇表征

      日期时间的有限长度序列由以下形式的字符组成:
      '-'?yyyy'-'mm'-'dd'T'hh':'mm':'ss('.'s+)(zzzzzz)?


      您所说的“检查生成的XML”的意思可能重复?什么工具或类?我建议您既不要使用
      Date
      也不要使用
      Calendar
      。这些类的设计很差,而且很早就过时了。相反,请使用来自的类。
      OffsetDateTime
      Instant
      具有
      toString
      方法,这些方法可以提供您在XML中观察到的格式。这需要回答很多文本一个简单的问题“我在XML中看到的是哪种格式?”,这是唯一提出的问题,但你甚至没有弄清楚。XML中使用的日期格式是由XML模式数据类型规范()定义的,数据类型是“与”/“密切相关的”,灵感来自“ISO 8601,所以实际上不是ISO 8601”。@Andreas实际上是“XML格式”只占问题的1/4,但感谢您的反馈。至于XML中该字符串的上下文,该问题没有提到涉及XML模式,甚至没有解释该字符串的位置