4

私は対立しています。24 時間のスケジュールを生成するスケジュールがありますが、11 月 3 日の午前 2 時に時刻が午前 2 時から午前 1 時に変わり、1 時間を減算することになります。Javaでそれをどのように処理できますか。サードパーティから入手したスケジュールは...

  1. 01:05 AM (最初のショー)
  2. 01:05 AM (2 回目のショー)
  3. 03:05 AM (第 3 ショー) など。

2回目のショーは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)

このスケジュールのみがエラーをスローしました。だから私の推測では、時間の変更が原因です。これに対応/修正する方法についてのアイデア。

4

1 に答える 1

2

11 月 3 日の午前 2 時に、時間が午前 2 時から午前 1 時に変わります。つまり、1 時間を引くことを意味します。Javaでそれを処理するにはどうすればよいですか

現地時間が変わる場所もあれば、変わらない場所もあります。時間自体は変化していません。その場所の「現在の時間」の表現のローカルな解釈です (時間自体はかなり一定であるか、私たちが住んでいるこの不正確に回転する岩のボールで可能な限り一定のままです)。

ポイントは、何かを差し引く必要はないということです。基になるデータは実際には何も変更されていないため、そのデータのローカル ビューのみが変更されます。

日付/時刻の値をどのように保存していますか? 基になるデータにUTC 時間を使用していない場合は、使用する必要があります。あなたが現在直面している理由、および他の非常によく似た問題を引き起こす他の非常によく似た理由のためです。ポイントは、保存されている実際のデータを、そのデータの特定のユーザーのビューから分離することです。

基になる日付/時刻データがユニバーサル形式で保存されているため、通常は表示目的で、必要に応じてその場で変換できます。(場合によっては、ローカル計算にも使用されます。) Joda Timeのようなライブラリは、そのために非常に役立ちます。現在直面している問題を理解し、解決するために、膨大な時間と労力が費やされています。

于 2013-10-29T17:31:19.133 に答える