Есть несколько проблем в данный момент. Я бы настоятельно рекомендовал бы использовать java.time
для максимально возможной работы, хотя даже это не делает это легким.
Как вы говорите, ваше значение имеет 10 цифр для «доли секунды» - это означает, что оно снижается с точностью до десятых долей наносекунды. По моему опыту, это весьма необычно для начала - и я не думаю, Java справится с этим, даже с java.time
.
Я подозреваю, что сначала вам нужно будет обработать данные, с точностью до 9 цифр. В этот момент довольно просто разобрать значение в ZonedDateTime
:
// Note this only has 9 digits of precision, not the original 10
String text = "2018-11-02 6:05:59.154116215 PM";
ZoneId zone = ZoneId.of("Asia/Colombo");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd h:mm:ss.SSSSSSSSS a", Locale.US)
.withZone(zone);
ZonedDateTime parsed = ZonedDateTime.parse(text, formatter);
System.out.println(parsed);
Обратите внимание, что я предоставил SSSSSSSSS
в виде доли секунды, чтобы обработать все 9 цифр. Также обратите внимание, что использование h
вместо HH
- HH
будет означать «24-часовой час дня с дополнением 0» - ни одна из этих частей не соответствует истинному исходному значению, которое использует «6» для 18:00. , Очень редко вы захотите объединить H
или HH
с a
.
Этот код дает вам ZonedDateTime
, который вы можете преобразовать в Date
, например:
Date date = Date.from(parsed.toInstant());
Я бы порекомендовал вам не делать это, если только вам действительно не нужно по причинам взаимодействия; Date
API - это неприятно по-разному.