夏令时导致我们的系统出现问题

时间:2013-10-29 17:17:19

标签: java dst

我陷入了冲突。我有一个生成24小时计划的时间表,但事情是,在凌晨2点的NOV,时间将从凌晨2点变为凌晨1点,意味着减去一小时。我怎样才能在Java中处理这个问题。我从第三方得到的计划说......

  1. 01:05 AM(1st Show)
  2. 01:05 AM(第二场秀)
  3. 03:05 AM(第三场秀)等等。
  4. 第二场秀应该是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)
    

    只有这个计划会抛出错误。所以我的猜测是因为时间的变化。任何想法如何适应/解决这个问题。

1 个答案:

答案 0 :(得分:2)

  

在凌晨2点的NOV,时间将从凌晨2点变为凌晨1点,意味着减去一小时。我如何在Java中处理这个问题

在某些地方,当地时间会发生变化,而在其他地方则不会。时间本身并没有改变,只是当地对“当前时间”的表现的解释(它本身保持相当稳定,或者在我们生活的这个不精确旋转的摇滚球上尽可能恒定)。

关键是,你不应该减去任何东西。因为基础数据中的任何内容实际上都没有变化,只有该数据的本地视图。

您如何存储日期/时间值?如果您没有使用UTC time作为基础数据,那么您应该这样做。由于您目前面临的原因,以及其他非常相似的原因会产生其他非常类似的问题。关键是要将存储的实际数据与任何特定用户对该数据的视图分开。

基础日期/时间数据以通用格式存储,您可以在需要时即时转换,通常用于显示目的。 (有时也用于本地计算。)像Joda Time这样的图书馆非常有用,并且花费了大量的时间和精力来理解和解决你目前面临的问题。