创建Java Calendar,基本参数

时间:2010-12-20 13:09:26

标签: java web-services calendar

我想通过Web服务(soap)发送Java Calendar对象。我注意到这种对象太复杂了,应该有更好的方法来发送相同的信息。

应该通过Web服务发出哪些基本属性,以便客户端可以使用此属性创建Java日历?

我在猜测:TimeZone,Date和Time?

此外,客户端如何根据这些属性重新创建日历?

谢谢!

4 个答案:

答案 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之间进行翻译:

  • GregorianCalendar - > XMLGregorianCalendar:javax.xml.datatype.DatatypeFactory.newXMLGregorianCalendar(GregorianCalendar)
  • XMLGregorianCalendar - > GregorianCalendar:XMLGregorianCalendar.toGregorianCalendar()

答案 2 :(得分:0)

最简单的方法是使用长值。

java.util.Calendar.getInstance().getTimeInMillis()

返回日期的长值。该值可用于构造java.util.Date或Calendar。

答案 3 :(得分:0)

TL;博士

使用标准ISO 8601格式的纯文本格式。

Instant.now().toString()
  

2018-01-23T01:23:45.123456Z

Instant.parse( "2018-01-23T01:23:45.123456Z" ) 

ISO 8601

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.time

java.util.Calendar类是与最早版本的Java捆绑在一起的麻烦的旧日期时间类的一部分。这些遗留类很糟糕,应该避免使用。

现在取代了现代业界领先的java.time类。

UTC

通常最好使用UTC而不是特定时区来传达时刻。

UTC时刻的标准格式为YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ,其中T将年 - 月 - 日与小时 - 分 - 秒分开。最后的ZZulu的缩写,表示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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore