質問

GregorianCalendar オブジェクトを Unix 時間 (つまり、平行)。Unix 時間 (長い) を GregorianCalendar オブジェクトに変換するメソッドも必要です。これを行う方法はありますか?そうでない場合は、どうすればよいでしょうか?ご協力をいただければ幸いです。

GregorianCalendar クラスへのリンク --> http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html

ありがとう。

役に立ちましたか?

解決

方法 getTimeInMillis() そして setTimeInMillis(long) これにより、UNIX 時間に 1000 を掛けた時間をミリ秒単位で取得および設定できます。UNIX 時間にはミリ秒は含まれず、秒のみが含まれるため、手動で調整する必要があります。

long unixTime = gregCal.getTimeInMillis() / 1000;
gregCal.setTimeInMillis(unixTime * 1000);

余談:アプリケーションで日付を頻繁に使用する場合、特に日付を変換したり、複数のタイムゾーンを使用したりする場合は、 ジョーダタイム 図書館。これは非常に完全で、Java に付属のカレンダー システムよりもかなり自然に理解できます。

他のヒント

私はそれを信じています GregorianCalendar.getTimeInMillis() そして GregorianCalendar.SetTimeInMillis() これにより、長い値を自由に取得および設定できるようになります。

setTimeInMillisとgetTimeInMillis機能をチェックアウト: http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis の()

Calendar.getTimeInMillis()あなたが探しているものである必要があります。

先生

myGregCal.toZonedDateTime().toEpochSecond()                     // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.

そして、別の方向に進むと…

GregorianCalendar.from(                                         // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
    Instant.ofEpochSecond( yourCountOfWholeSecondsSinceEpoch )  // Moment in UTC.
        .atZone(                                                // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
            ZoneId.of( "Africa/Tunis" ) 
        )
)                                                              

従来の日時クラスを避ける

他の回答は正しく、短いものです。ただし、参考までに、次のような面倒な古い日付時刻クラスは、 java.util.Date, java.util.Calendar, 、 そして java.text.SimpleDateFormat 今は 遺産, に取って代わられる java.time Java 8 および Java 9 に組み込まれたクラス。

ここでは、問題の代わりに最新のクラスを変換して使用する方法を示します。

java.time

従来のクラスからの変換 GregorianCalendar 現代のクラスへ ZonedDateTime. 。古いクラスに追加された新しいメソッドを呼び出します。

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

そして、別の方向に進むと…

GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;

までに 「ユニックスタイム」 あなたが意味したのは、 エポックリファレンス 1970 年の最初の瞬間 (UTC) 1970-01-01T00:00:00Z を呼び出してください。 toEpochSecond.

long secondsSinceEpoch = zdt.toEpochSecond() ;

UTC での 1970 年からのミリ秒数を意味する場合は、 Instant. 。の Instant クラスはタイムライン上の瞬間を表します。 UTC の解像度で ナノ秒 (小数点以下 9 桁まで)。

Instant instant = zdt.toInstant() ;

ミリ秒数を尋ねる.

long millisecondsSinceEpoch = instant.toEpochMill() ;

整数秒を要求するか、または ミリ秒 データ損失が発生する可能性があります。の ZonedDateTime そして Instant どちらもナノ秒に解決されます。それで、どれでも マイクロ秒 秒またはミリ秒全体をカウントする場合、存在する可能性のあるナノ秒は無視されます。


について java.time

java.time フレームワークは Java 8 以降に組み込まれています。これらのクラスは、面倒な古いクラスに取って代わります。 遺産 日時クラスなど java.util.Date, Calendar, & SimpleDateFormat.

ジョーダタイム プロジェクト、現在進行中 メンテナンスモード, への移行をアドバイスします。 java.time クラス。

詳細については、を参照してください。 オラクルのチュートリアル. 。また、Stack Overflow で検索すると、多くの例や説明が得られます。仕様は JSR 310.

を使って JDBCドライバー に準拠 JDBC 4.2 以降でも交換可能です java.time オブジェクトをデータベースに直接接続します。文字列や java.sql.* クラスは必要ありません。

java.time クラスはどこで入手できますか?

  • Java SE8, Java SE9, 、 以降
    • 内蔵。
    • 実装がバンドルされている標準 Java API の一部。
    • Java 9 では、いくつかのマイナーな機能と修正が追加されています。
  • Java SE6 そして Java SE 7
  • アンドロイド
    • Android の新しいバージョンには、java.time クラスの実装がバンドルされています。
    • 以前の Android の場合、 スリーテンABP プロジェクトが適応する ThreeTen バックポート (上記の通り)。見る ThreeTenABPの使い方….

ThreeTen-Extra プロジェクトは追加のクラスで java.time を拡張します。このプロジェクトは、将来 java.time に追加される可能性があるための実験場です。ここで次のような便利なクラスを見つけることができます。 Interval, YearWeek, YearQuarter, 、 そして もっと.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top