Java 如何识别日期格式?
1) 如果我打印出日历对象,我会得到: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
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
方法,这些方法可以提供您在XML中观察到的格式。这需要回答很多文本一个简单的问题“我在XML中看到的是哪种格式?”,这是唯一提出的问题,但你甚至没有弄清楚。XML中使用的日期格式是由XML模式数据类型规范()定义的,数据类型是“与”/“密切相关的”,灵感来自“ISO 8601,所以实际上不是ISO 8601”。@Andreas实际上是“XML格式”只占问题的1/4,但感谢您的反馈。至于XML中该字符串的上下文,该问题没有提到涉及XML模式,甚至没有解释该字符串的位置toString