【问题标题】:TimeZone issue in Java XMLGregorianCalendarJava XMLGregorianCalendar 中的时区问题
【发布时间】:2012-09-11 20:13:10
【问题描述】:

我希望这不是重复。 我在这里检查了其他搜索,所有搜索似乎都在谈论使用 SimpleDateFormat 以正确的 TimeZone 格式“显示”日期。

但是,我的问题是我获得了一个 XMLGregorianCalendar 对象,让我们在“CET”中说。

我必须从这个对象中找出格式,并将当前时间也发送到与服务器相同的 TimeZone 中。

例如:我需要一个以这种格式返回我的 XMLGregorianCalendar 对象(带时区):

2012-09-19T15:23:36.421+02:00

所以我只是尝试了以下 sn-p 似乎只返回本地时区的时间:(

TimeZone utc = TimeZone.getTimeZone("CET");
GregorianCalendar gc = new GregorianCalendar();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
df.setTimeZone(utc);
System.out.println(" - Gregorian UTC [" + df.format(gc.getTime()) + "]")

XMLGregorianCalendar currServTime = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);

System.out.println("currServTime is "+currServTime);

【问题讨论】:

  • 这应该是 TimeZone utc = TimeZone.getTimeZone("UTC"); 不是 CET 吗?
  • 当然。为了确定,我正在尝试各种示例字符串!

标签: java time timezone datetime-format


【解决方案1】:

您应该在GregorianCalendar 中包含您感兴趣的时区,方法是将其传递给the constructorsetting it afterwards。因此,这些行中的任何一条都应该适合您:

GregorianCalendar gc = new GregorianCalendar(utc);
gc.setTimeZone(utc);

【讨论】:

  • 是的,我以前试过。但问题是我的输出阅读:2012-09-19T15:23:36.421Z
  • @user907810:为什么你认为这是个问题? The specs 清楚地表明 Z 是 UTC 时区的正确和规范表示,即与 UTC 零偏移的表示。如果你想要一些非规范的替代方案,比如+00:00,你必须执行字符串替换或类似的操作。
  • 谢谢。事实上,当我尝试 est 时,我得到了你提到的 +5:00。也许带有 z 的 utc 是标准
  • 是的,带有Z 的UTC 是规范形式。像+00:00-00:00 这样的公式也是有效的,但带有Z 的公式是首选。我之前评论中的链接说明了很多。
猜你喜欢
  • 2012-03-03
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多