Java でグレゴリオ暦から Unix 時間に変換するにはどうすればよいですか?
-
26-09-2019 - |
質問
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
- java.time 機能の多くは、Java 6 および 7 にバックポートされています。 ThreeTen バックポート.
- アンドロイド
- Android の新しいバージョンには、java.time クラスの実装がバンドルされています。
- 以前の Android の場合、 スリーテンABP プロジェクトが適応する ThreeTen バックポート (上記の通り)。見る ThreeTenABPの使い方….
の ThreeTen-Extra プロジェクトは追加のクラスで java.time を拡張します。このプロジェクトは、将来 java.time に追加される可能性があるための実験場です。ここで次のような便利なクラスを見つけることができます。 Interval
, YearWeek
, YearQuarter
, 、 そして もっと.