我陷入了冲突。我有一个生成24小时计划的时间表,但事情是,在凌晨2点的NOV,时间将从凌晨2点变为凌晨1点,意味着减去一小时。我怎样才能在Java中处理这个问题。我从第三方得到的计划说......
第二场秀应该是2:05,但由于时间的变化,它是1:05。相同的时间导致异常。请帮我解决这个问题。
由于
以下是我在Apache FOP中使用XSL文档生成PDF计划时遇到的错误。
Caused by: java.lang.IndexOutOfBoundsException: Index: 450, Size: 421
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at org.apache.fop.layoutmgr.table.ColumnSetup.getXOffset(ColumnSetup.java:224)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.getXOffsetOfGridUnit(
TableContentLayoutManager.java:603) at
org.apache.fop.layoutmgr.table.TableContentLayoutManager$RowPainter.
addAreasForCell(TableContentLayoutManager.java:981)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager$RowPainter.
addAreasAndFlushRow
(TableContentLayoutManager.java:943)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager$RowPainter.
handleTableContentPosition(TableContentLayoutManager.java:800)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.iterateAndPaintPositions
(TableContentLayoutManager.java:754)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.addAreas
(TableContentLayoutManager.java:687)
at org.apache.fop.layoutmgr.table.TableLayoutManager.addAreas
(TableLayoutManager.java:346)
at org.apache.fop.layoutmgr.AreaAdditionUtil.addAreas(AreaAdditionUtil.java:116)
at org.apache.fop.layoutmgr.FlowLayoutManager.addAreas(FlowLayoutManager.java:297)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager$PageBreaker.addAreas
(PageSequenceLayoutManager.java:356)
at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:507)
at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:370)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager$PageBreaker.doPhase3
(PageSequenceLayoutManager.java:369)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:345)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:263)
只有这个计划会抛出错误。所以我的猜测是因为时间的变化。任何想法如何适应/解决这个问题。
答案 0 :(得分:2)
在凌晨2点的NOV,时间将从凌晨2点变为凌晨1点,意味着减去一小时。我如何在Java中处理这个问题
在某些地方,当地时间会发生变化,而在其他地方则不会。时间本身并没有改变,只是当地对“当前时间”的表现的解释(它本身保持相当稳定,或者在我们生活的这个不精确旋转的摇滚球上尽可能恒定)。
关键是,你不应该减去任何东西。因为基础数据中的任何内容实际上都没有变化,只有该数据的本地视图。
您如何存储日期/时间值?如果您没有使用UTC time作为基础数据,那么您应该这样做。由于您目前面临的原因,以及其他非常相似的原因会产生其他非常类似的问题。关键是要将存储的实际数据与任何特定用户对该数据的视图分开。
基础日期/时间数据以通用格式存储,您可以在需要时即时转换,通常用于显示目的。 (有时也用于本地计算。)像Joda Time这样的图书馆非常有用,并且花费了大量的时间和精力来理解和解决你目前面临的问题。