2017-12-14 7 views
0

エポックタイムが与えられた場合:例えば(1513213212)今は午前1時から1になるはずです。それを今日の時間に変換するにはどうすればいいですか?それは数学(除算、mod)を使用してそれを行うことは可能ですか?エポックタイムを時間に変換する

+1

あなたはMathを使うことができますが、確かにLocalTimeクラスは理由のために存在します –

+4

* "math(division、mod)を使用するだけですか?" * - 厳密に言えば、そうですが、日付/時刻の数学は複雑で、多数のエッジケースをカバーする必要があります(1日に24時間、1年に365日という時間は必ずしもありません)。あなたは、Java 8以降で利用可能なDate/Time APIを使用する方が良いですか、本当に詰まっている場合は、Calendarかjava.util.Date – MadProgrammer

+0

これを見てください:https://stackoverflow.com/質問/ 30709897/convert-millisecond-to-joda-date-for-for-zone-0000 –

答えて

0

数学を使うだけでは不可能に近いでしょう。 (うるう年とすべて)。すべての難しい作業を行う確立されたAPIを使用する方がよいでしょう。

これを行うには、次の方法を使用できます。

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(1513213212* 1000L); 
cal.setTimeZone(TimeZone.getTimeZone("UTC")); 

System.out.println(cal.get(Calendar.HOUR));//12 hour clock 
System.out.println(cal.get(Calendar.HOUR_OF_DAY));//24 hour clock 
+0

若者に古くなった古い「カレンダー」クラスを使用するよう教えてください。今日は、Javaの最新の日付と時刻APIである '' java.time'(https://docs.oracle.com/javase/tutorial/datetime/)の方がはるかに優れています。 –

+0

私たちは、「時間帯」が求められたときとは異なる質問を解釈しましたか? 2番目の値が1513260000だった場合、正解として14を理解しました。あなたのコードは2を印刷します。 –

+1

私はOPが若いかどうか分かりません。あなたは正しいです、私は12時間形式を使用していました。 24時間形式も追加されました。 – 11thdimension

2

使用java.time、また、JSR-310として知られている最新のJavaの日付と時刻のAPI:あなただけの数学をやってみたかった場合でも

01:00:12 
1 

LocalTime timeOfDay = Instant.ofEpochSecond(1513213212L) 
      .atOffset(ZoneOffset.UTC) 
      .toLocalTime(); 
    System.out.println(timeOfDay); 
    int hourOfDay = timeOfDay.getHour(); 
    System.out.println(hourOfDay); 

このプリント私はまだそれのために標準的なライブラリメソッドを使用することを好むでしょう:

long epochSeconds = 1513213212L; 
    // convert the seconds to days and back to seconds to get the seconds in a whole number of days 
    long secondsInWholeDays = TimeUnit.DAYS.toSeconds(TimeUnit.SECONDS.toDays(epochSeconds)); 
    long hourOfDay = TimeUnit.SECONDS.toHours(epochSeconds - secondsInWholeDays); 
    System.out.println(hourOfDay); 

これも1を出力します。

あなたの意図は「エポックタイムを与えられました:例えば(1513213212)私は1 AMなので今はUTCです」あなたの意見では、この意図を最も明確に表しているのはどれですか?これは私が選ぶために使うものです。

MadProgrammerはhis/her commentで日付と時刻の計算が複雑であるため、日付と時刻のAPIに任せておかなければなりませんが、これはあまりにも複雑な数式で正しい回答。それはうるう秒の問題を無視することが安全であるかどうかにかかっています。もし数学的解法に行くなら、この仮定を確認してください。個人的にはとにかく使用しません。

関連する問題