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文字の略語を避けてください。あいまいで、しばしば真のタイムゾーンではありません。
PSTタイムゾーン?これらの3つ(および4つ)のレタータイムゾーンの省略形に注意してください。あいまいであり、しばしば真のタイムゾーンではありません。フィリピン標準時、太平洋標準時、ピットケアン標準時?代わりに、アメリカ/バンクーバーのようなタイムゾーンを* region/city *として指定します。 –
私は@Oleに同意します。私のコードでTIME_ZONE_PSTはAmerica/Los_Angelesを指しています –
それは良いです、Sajnd Surendran。私はロサンゼルスがPSTではなくPDTにいるので、名前の変更をお勧めします。 –