私はUnixのタイムスタンプを日付オブジェクトに変換する必要があります。
私はこれを試しました:
Java.util.Date time = new Java.util.Date(timeStamp);
タイムスタンプ値は1280512800
です。
Dateは "2010/07/30 - 22:30:00"でなければなりませんが(私はPHPで取得します)、代わりにThu Jan 15 23:11:56 IRST 1970
を取得します。
どうすればいいの?
1280512800
については、Javaがミリ秒を期待しているので、1000を掛けます:
Java.util.Date time=new Java.util.Date((long)timeStamp*1000);
あなたが既にミリ秒を持っているならば、ちょうどnew Java.util.Date((long)timeStamp);
Dateオブジェクトを割り当て、 "the Epoch"として知られる標準的な基準時間、つまり1970年1月1日00:00:00 GMTから指定されたミリ秒数を表すようにそれを初期化します。
Java 8 は日付と時刻を扱うための新しいAPIを導入しました: Java.timeパッケージ 。
Java.timeでは、次のものを使用できます。
Date date = Date.from( Instant.ofEpochSecond( timeStamp ) );
Instant は、Java 8のタイムスタンプを表します。静的なDate.from()
メソッドを使うと、Instant
をJava.util.Date
インスタンスに変換できます。
これは正しい方法です。
Date date = new Date ();
date.setTime((long)unix_time*1000);
カレンダが新しい方法です。
Calendar mydate = Calendar.getInstance();
mydate.setTimeInMillis(timestamp*1000);
out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));
最後の行は使い方の一例です。これは "14.06.2012"のように表示されます。
タイムスタンプを保存するためにSystem.currentTimeMillis()を使用した場合は、 "* 1000"の部分は不要です。
タイムスタンプが文字列に含まれている場合は、最初にlongとして解析する必要があります。Long.parseLong(timestamp)。
https://docs.Oracle.com/javase/7/docs/api/Java/util/Calendar.html
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18:00:00Z
Java 8以降に組み込まれた新しいJava.timeフレームワークはJoda-Timeの後継です。
これらの新しいクラスには、Epochの 全体の秒数を変換する便利なファクトリメソッド が含まれています。あなたはInstant
を取得します。これはUTCのタイムライン上の瞬間で、最大ナノ秒の分解能です。
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString():2010-07-30T18:00:00Z
それを参照してください コードはIdeOne.comでライブ配信 。
Asia/Kabul
またはAsia/Tehran
タイムゾーンあなたは、ここで見られる18:00の代わりに22:30の時刻の値を取得していると報告しました。あなたのPHPユーティリティがUTCから調整するために暗黙的にデフォルトタイムゾーンを適用しているのではないでしょうか。ここでの私の値はZ
で表されるUTCです(Zulu
の略、UTCを意味します)。あなたのマシンのOSまたはPHPがAsia/Kabul
または Asia/Tehran
タイムゾーンに設定されている可能性はありますか?私はあなたがあなたの出力にIRST
を報告したように、それは明らかにイランの時間を意味すると思います。現在2017年に これらが唯一のゾーンです 夏時間がUTCより4時間半遅れている。
continent/region
、 America/Montreal
、またはAfrica/Casablanca
のように、 正しいタイムゾーン名 をPacific/Auckland
の形式で指定します。 EST
、IST
、IRST
などの3〜4文字の略語は、not trueタイムゾーンであり、標準化されておらず、一意でもない(!)ので、決して使用しないでください。
特定の地域のタイムゾーンのレンズを通して自分の瞬間を見るためにwantを使用する場合は、ZoneId
を適用して ZonedDateTime
を取得します。それでも同じ瞬間ですが、違うものとして見られます 実時間 。
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22:30 + 04:30 [アジア/テヘラン]
新しいJava.timeクラスを使い続けるべきです。ただし、必要に応じて古いものに変換できます。
Java.util.Date date = Java.util.Date.from( instant );
更新: Joda-Time プロジェクトは メンテナンスモード になりました。チームは Java.time クラスへの移行を勧めています。
参考までに、 Joda-TimeDateTime のコンストラクタは似ています:long
(int
ではなく)を生成するには、1000を乗算します。
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
よく知られている面倒なJava.util.Dateクラスと.Calendarクラスを避けるために最善です。あなたが日付を使用する必要がある場合しかし、あなたはJoda-Timeから変換することができます。
Java.util.Date date = dateTime.toDate();
Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
、& SimpleDateFormat
のような、面倒な古い レガシー 日時クラスに代わるものです。
Joda-Time プロジェクトは、現在 メンテナンスモード になっており、 Java.time クラスに移行することをお勧めします。
詳細については、 Oracle Tutorial を参照してください。そして多くの例と説明についてはStack Overflowを検索してください。指定は JSR 31 です。
データベースと直接Java.timeオブジェクトを交換できます。 JDBC 4.2 以降に準拠した JDBCドライバー を使用してください。文字列もJava.sql.*
クラスも必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。 Interval
、 YearWeek
、 YearQuarter
、 more などの便利なクラスがあります。
Dateのコンストラクタは、timeStamp値がミリ秒単位であることを期待しています。タイムスタンプの値に1000を掛けてから、コンストラクタに渡します。
別のマシンのタイムスタンプ値を変換している場合は、そのマシンのタイムゾーンも確認する必要があります。例えば;
ESTまたはUTCタイムゾーンで実行した場合、上記の説明は異なるDate値になります。
タイムゾーンを設定します。 UTCとも呼ばれる、あなたは単に書き換えることができます。
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Java.util.Date time= new Java.util.Date((Long.parseLong(timestamp)*1000));