Tia*_*ago 6 java timezone datetime epoch jodatime
我很难比较不同时区中的两个DateTime对象.
我所知道的:
1)我知道,"isBefore()"方法并没有采取时区考虑在内.因此,下面的"if"条件不正确(即使我希望它是真的):
long aRandomTimeSinceTheEpoch = 1234567789L;
String TIMEZONE_SYDNEY_AUSTRALIA = "Australia/Sydney";
DateTimeZone sydneyTimeZone = DateTimeZone.forID(TIMEZONE_SYDNEY_AUSTRALIA);
Chronology chronologySydney = GJChronology.getInstance(sydneyTimeZone);
String TIMEZONE_NEWYORK = "America/New_York";
DateTimeZone newYorkTimeZone = DateTimeZone.forID(TIMEZONE_NEWYORK);
Chronology chronologyNewYork = GJChronology.getInstance(newYorkTimeZone);
DateTime sydneyDateTime = new DateTime(aRandomTimeSinceTheEpoch, chronologySydney);
DateTime newYorkDateTime = new DateTime(aRandomTimeSinceTheEpoch, chronologyNewYork);
if( newYorkDateTime.isBefore(sydneyDateTime) ){
System.out.println("true");
}
Run Code Online (Sandbox Code Playgroud)
2)对这个答案(基于/sf/answers/615578631/)看来正确的方式做到这一点是不是时期,如时期是什么,我试图做正确的概念.但是,该代码有时会抛出"UnsupportedOperationException - 如果句点包含年份或月份"异常(因为我处理的日期可能相差最多2年).
简而言之,我想要的只是一个考虑TimeZones 的"isBefore()"方法.(并且不会像上面那样抛出异常).我如何在Joda中实现这一目标?
您所缺少的是,您可以在几秒钟或几毫秒内测量时间 - 始终为UTC.
所以你的sydneyDateTime
和newYorkDateTime
可能有不同的区域,但由于它们都来自相同的aRandomTimeSinceTheEpoch
值,所以它们都出现在同一个确切的时刻.因此,两者都不在另一个之前.
通过类比,它就像问哪个更大,1英寸或2.54厘米?
根据您的评论,您似乎希望比较每个时区的本地时间,您可以这样做:
if( newYorkDateTime.toLocalDateTime().isBefore(sydneyDateTime.toLocalDateTime()) )
Run Code Online (Sandbox Code Playgroud)
请注意,如果您始终从同一个源瞬间开始,则此值始终为true.就像2.54总是大于1.
归档时间: |
|
查看次数: |
14990 次 |
最近记录: |