3

私は経験豊富な Delphi (パスカル) 開発者として Java を学習する GregorianCalendar を理解しようとしています。ドキュメントによると、1970 年 1 月 1 日 0:00:00 が、この時点からの経過時間を秒単位で計算するための基準です。だから、実験では、私は新しい変数を設定します

GregorianCalendar cal2 = new GregorianCalendar(1970, 0, 1, 0, 0, 0); //January=0, Day=1, Hour=0, Min=0, Sec=0

それから私は時間を読んだ

cal2.getTimeInMillis()

これは、定義によりゼロに等しい必要があります。それでも、18,000,000 ミリ秒を取得します。これは5時間です。これはタイムゾーンと関係があると思いますか?何か提案があれば、私はイースタン ゾーンにいます。

もしそうなら、私はこれをどのように説明しますか?私は本当に理解しようとしているので、2つの時間の差を秒単位で計算できます。これが分からないと先に進めません!ありがとう!ダグ

4

4 に答える 4

2
package so;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class BeginningOfTime {

  public static void main (final String[] args) {

    final Calendar localTZ = new GregorianCalendar (1970, 0, 1, 0, 0, 0);
    dump (localTZ);

    final Calendar utcTZ = new GregorianCalendar ();
    utcTZ.clear ();
    utcTZ.setTimeZone (TimeZone.getTimeZone ("UTC"));
    dump (utcTZ);
  }

  private static final void dump (final Calendar c) {

    System.out.printf ("%s: %d (offset %d)%n",
                       c.getTimeZone ().getDisplayName (),
                       c.getTimeInMillis (),
                       c.get (Calendar.ZONE_OFFSET));
  }
}

これをもたらします:

Eastern Standard Time: 18000000 (offset -18000000)
Coordinated Universal Time: 0 (offset 0)
于 2012-08-29T02:17:47.537 に答える
1

これがあなたの質問に直接答えないことは知っていますがGregorianCalendar、ここでは最善のアプローチではないかもしれません. DurationPeriodなどの概念を具体的に探しているので、Joda Timeのようなライブラリを使用することをお勧めします。また、 Java 8で計画されているJSR 310の RIであるThreeTenも参照してください。

経過時間を秒単位で計算するJodaTimeソリューションを次に示します。

  DateTime start = new DateTime(2012, 3, 25, 0, 0, 0, 0);
  DateTime end = new DateTime(2012, 3, 26, 0, 0, 0, 0); 
  int seconds = Seconds.secondsBetween(start, end).getSeconds();
于 2012-08-29T02:42:10.410 に答える
0

東部時間帯だと思います。大きな問題は、それを説明する必要があるかどうかです。同じタイムゾーンで時間を計算/記録しますか? そのクラスには多くの機能があり、非常に肥大化しますが、非常に便利です。

GregorianCalendar クラスにはタイム ゾーン機能が含まれており、DST オフセットの提供なども実行できます。

于 2012-08-29T02:04:20.403 に答える
0
于 2018-02-06T03:03:53.237 に答える