2017-12-26 13 views
1

エボリューションを1413225446.92000に変換する方法をjavaのZonedDateTimeに変換しますか?エボリューションをJavaのZonedDateTimeに変換する

与えられたコードは、これが上記の値に対してNumberFormatExceptionがスローされ、従って長い値を期待。

ZonedDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(dateInMillis)), ZoneId.of(TIME_ZONE_PST)); 
+0

PSTタイムゾーン?これらの3つ(および4つ)のレタータイムゾーンの省略形に注意してください。あいまいであり、しばしば真のタイムゾーンではありません。フィリピン標準時、太平洋標準時、ピットケアン標準時?代わりに、アメリカ/バンクーバーのようなタイムゾーンを* region/city *として指定します。 –

+0

私は@Oleに同意します。私のコードでTIME_ZONE_PSTはAmerica/Los_Angelesを指しています –

+0

それは良いです、Sajnd Surendran。私はロサンゼルスがPSTではなくPDTにいるので、名前の変更をお勧めします。 –

答えて

1

スプリット64ビット長整数のペアに数:

  • 全秒数UTC
  • 1970年の最初の瞬間のエポックの基準日以降のためのナノ秒数

小数第二は、ファクトリメソッドInstant.ofEpochSecond​(long epochSecond, long nanoAdjustment)

にこれらの数字を渡します

Instantが手元にある場合は、タイムゾーンを割り当ててZonedDateTimeにします。

ZoneId z = ZoneId.of("America/Los_Angeles") ; 
ZonedDateTime zdt = instant.atZone(z) ; 
+0

ありがとう@Basil Bourque。これは –

0

Basil Bourque’s answerが良いです。分数部分からナノ秒の整数にナノ秒を取り出すには、落とし穴が1つまたは2つあります。私はお勧め:

String dateInMillis = "1413225446.92000"; 
    String[] secondsAndFraction = dateInMillis.split("\\."); 
    int nanos = 0; 
    if (secondsAndFraction.length > 1) { // there’s a fractional part 
     // extend fractional part to 9 digits to obtain nanoseconds 
     String nanosecondsString 
       = (secondsAndFraction[1] + "000000000").substring(0, 9); 
     nanos = Integer.parseInt(nanosecondsString); 
     // if the double number was negative, the nanos must be too 
     if (dateInMillis.startsWith("-")) { 
      nanos = -nanos; 
     } 
    } 
    ZonedDateTime zdt = Instant 
      .ofEpochSecond(Long.parseLong(secondsAndFraction[0]), nanos) 
      .atZone(ZoneId.of("Asia/Manila")); 
    System.out.println(zdt); 

これは、我々はナノ秒のために64ビットを必要としないので、私はちょうどintを使用しています

2014-10-14T02:37:26.920+08:00[Asia/Manila] 

を印刷します。

エポックタイムが科学的表記(1.41322544692E9)である場合、上記は機能しません。

地域/都市フォーマットで、希望のタイムゾーンをアジア/マニラ(例えば、アメリカ/バンクーバー、アメリカ/ロサンゼルス、パシフィック/ピットケアンなど)に変更しない場合は、置き換えてください。 PSTのような3文字の略語を避けてください。あいまいで、しばしば真のタイムゾーンではありません。

+0

ありがとう@Ole V.V. –

+0

nanosには64ビットの「long」を使用することもできます。 'Instant.ofEpochSecond'への引数はそのまま渡されます。 –

関連する問題