我必须用这个日期格式“yyyy-mm”创建xmlgregoriancalendar对象-ddthh:mi:秒±tz“例如”2015-07-01t17:42:49+04“
我不知道怎么做。我已经用了很多方法来转换日期,但是这个模式似乎不起作用。
经过一些实验后,我发现“yyyy-mm-dd't'hh:mm:ssx”将提供所需的输出。但是它是一个字符串,我不能用xmlgregoriancalendar实现相同的格式。
它给了我“2015-07-01t17:42:4234+05:00”,正如你看到的,我不需要额外的符号。
1条答案
按热度按时间kqlmhetl1#
日期时间对象没有格式
具有此日期格式的xmlgregoriancalendar对象
日期时间对象,例如
XMLGregorianCalendar
没有“格式”。它们以某种方式在内部表示日期时间值,但不太可能在文本中。可以通过解析文本来示例化日期时间对象。日期时间对象可以生成表示其内部值的文本。但是文本和日期时间对象是不同的,彼此独立。
java.time文件
这个
XMLGregorianCalendar
类现在已过时。被jsr 310中定义的现代java.time类所取代。将输入字符串解析为
OffsetDateTime
例如,包括与utc的偏移量,但不包括时区。生成标准iso 8601格式的文本。
2015-07-01t17:42:49+04:00
偏移部分
末尾的部分是与utc的偏移量,即本初子午线前后的小时分秒数。在ISO8601中,加号是一个表示utc之前的正数。减号是一个负数,表示utc之后。
抑制偏移部分
有些人可能会在零时放弃秒数,或者在零时放弃分钟数。但抑制这些数字并不能改变其含义。这三根弦都代表同一时刻:
2015-07-01T17:42:49+04
2015-07-01T17:42:49+04:002015-07-01T17:42:49+04:00:00
你说:“2015-07-01t17:42:4234+05:00”,如您所见,我不需要其他符号。
[我想你是真的
"2015-07-01T17:42:49+04:00"
但打错了字。]你真的不应该关心这个。事实上,我建议您总是同时包含小时和分钟,因为我已经看到多个库/协议都需要小时和分钟,如果省略,就会中断。虽然在ISO8601中,当分和秒的值为零时,它们确实是可选的,但我建议您始终包括零时的分和秒。
日期时间格式
如果你坚持不这样做,你将需要使用
DateTimeFormatter
类,可能还有DateTimeFormatterBuilder
,以抑制零时的分钟数。也许是这样的:2015-07-01t17:42:49+04
这个
x
格式模式中的代码抑制了分钟和秒(如果它们的值为零)。如果你自己格式化,一定不要在非零时截断,否则你的结果会是错误的(不同的时刻)。以印度为例,当前使用的偏移量是5个半小时(包括30分钟而不是0分钟的偏移量)。
转储到控制台。
2015-07-01t19:12:49+05:30
xmlgregoriancalendar格式
如果您必须使用旧的遗留类
XMLGregorianCalendar
,您可以从我们的OffsetDateTime
上面代码中看到的对象。请看另一个问题的答案。xgc.tostring():2015-07-01t17:42:49+04:00
关于java.time
java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如
java.util.Date
,Calendar
, &SimpleDateFormat
.要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
现在处于维护模式的joda time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线
java.sql.*
班级。从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9添加了一些次要的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android包java.time类的更高版本实现。
对于早期的android(<26),threetenabp项目采用了threeten backport(如上所述)。了解如何使用threetenabp…。