2013-08-23 70 views
3

我定义如下一个乔达间隔:乔达间隔丢失时区信息

final DateTimeZone fromDtz = DateTimeZone.forID("Europe/Paris"); 
final DateTime fromDt = DateTime.parse("2013-08-08T01:02:03+0200").withZone(fromDtz); 
final DateTimeZone toDtz = DateTimeZone.forID("Europe/London"); 
final DateTime toDt = DateTime.parse("2013-08-08T01:02:05+0100").withZone(toDtz); 
final Interval interval = new Interval(fromDt, toDt); 

但是看来我失去了对时区的时间间隔结束的信息。如果我在区间做一个简单的toString()我收到:

2013-08-08T01:02:03.000+02:00/2013-08-08T02:02:05.000+02:00 

它缺少一些我想保留(日期时间的特定时区在间隔结束)的信息。

我走过了文档和源代码,看起来Interval只包含一个单一的年表。有没有办法告诉乔达保持两个时区而不用手动卡入两个单独的DateTime

回答

5

基本上,间隔时间是两个之间的时间点 - 时间点没有时间顺序,时区等。它们只是通用时间线上的点 - 自时代以来的毫秒数。 ReadableInterval曝光getChronology这个事实是一个设计缺陷,IMO--但实际上只有这样的年表。如果你想保留更多的信息,我相信你需要使用你自己的类型。

这可能是作为一个开始/结束对和地方,你真的想使用乔达时间Interval方法toInterval()方法简单,但我不认为有什么内置约达时间做你想要什么。

+0

呀,虽然我可以看到他们为什么会想有作为,否则我不知道怎么样'的toString方法()'就可以打印任何明智的年表,并考虑到揭露它似乎是不公平的。猜猜我会继续推出自己的。谢谢! – jgm

+0

@jgm:ToString应该只使用ISO年表,IMO。这就是我们在野田时间所做的。正如“一对瞬间”所描述的那样,它基本上不是间隔的一部分。虽然Joda Time API肯定比Date和Calendar好很多,但它仍然有一些丑陋的瑕疵:( –

+0

是真的,并且JSR-310甚至没有'Interval'('InstantInterval'被删除了一段时间)假设我自己的建筑物不会受到伤害 – jgm

-1

尝试使用withZoneRetainFields()

+0

问题是间隔本身只存储一个单一的年表,并且OP要维持两个 –

+0

'fraid这不是问题,我的问题不在于日期在错误区域的事实;'fromDtz'和'toDtz'的每一个在这方面是一致的。是'Interval'只记得一个单一的年表。 – jgm

+0

你是对的,我的坏...感谢指出 –