我想通过Web服务(soap)发送Java Calendar对象。我注意到这种对象太复杂了,应该有更好的方法来发送相同的信息。
应该通过Web服务发出哪些基本属性,以便客户端可以使用此属性创建Java日历?
我在猜测:TimeZone,Date和Time?
此外,客户端如何根据这些属性重新创建日历?
谢谢!
答案 0 :(得分:3)
事实上,我会选择Timezone tz
(日历表示的时区),Locale loc
(用于数据表示目的)和long time
(UTC时间),如果你想要的话相同的对象。
在大多数用途中,时间已经足够了,接收者会用他自己的时区和地区来表达。
答案 1 :(得分:1)
我认为您要发送的Calendar
实例的类型为java.util.GregorianCalendar
。在这种情况下,您可以使用xsd:dateTime
。对于SOAP,Java通常会将其绑定到javax.xml.datatype.XMLGregorianCalendar
实例。
在GregorianCalenda和XMLGregorianCalendar之间进行翻译:
javax.xml.datatype.DatatypeFactory.newXMLGregorianCalendar(GregorianCalendar)
XMLGregorianCalendar.toGregorianCalendar()
答案 2 :(得分:0)
最简单的方法是使用长值。
java.util.Calendar.getInstance().getTimeInMillis()
返回日期的长值。该值可用于构造java.util.Date或Calendar。
答案 3 :(得分:0)
使用标准ISO 8601格式的纯文本格式。
Instant.now().toString()
2018-01-23T01:23:45.123456Z
Instant.parse( "2018-01-23T01:23:45.123456Z" )
ISO 8601标准是一套精心设计的实用文本格式,用于表示日期时间值。
2018-01-14T03:57:05.744850Z
在解析/生成字符串时,java.time类默认使用这些标准格式。 ZonedDateTime
类明智地扩展了标准,以便在方括号中附加时区名称。
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
String output = zdt.toString() ;
2018-01-13T19:56:26.318984-08:00 [美国/洛杉矶]
java.util.Calendar
类是与最早版本的Java捆绑在一起的麻烦的旧日期时间类的一部分。这些遗留类很糟糕,应该避免使用。
现在取代了现代业界领先的java.time类。
通常最好使用UTC而不是特定时区来传达时刻。
UTC时刻的标准格式为YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ
,其中T
将年 - 月 - 日与小时 - 分 - 秒分开。最后的Z
是Zulu
的缩写,表示UTC
。
Instant
Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
Instant instant = Instant.now() ;
String output = instant.toString() ;
2018-01-14T03:57:05.744850Z
如果特定时区至关重要,请使用上面显示的ZonedDateTime
。
可以解析标准格式的这些字符串以实例化java.time对象。
Instant instant = Instant.parse( "2018-01-14T03:57:05.744850Z" ) ;
ZonedDateTime zdt = ZonedDateTime.parse( "2018-01-13T19:56:26.318984-08:00[America/Los_Angeles]" ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。