Как достать из строки LocalTime?

303
04 ноября 2017, 12:42

Наш препод решил нас озадачить и вот сейчас у нас есть вот такой массив строк String[] attributes = line.split(";"); в нем мы разделяем вот такую строку 1508877719;KRP;All;Text; есстественно что потом у нас будут вот такие переменные у этого массива:

attributes[0] = "1508877719"; 
attributes[1] = "KRP";
attributes[2] = "All";
attributes[3] = "Text";

И потом у нас есть Лист в который надо засовывать всё это, все-бы ничего только вот с первым проблема есть потому вот это attributes[0] = "1508877719"; мы должны засунуть в LocalTime, и перевести эту строку в LocalTime я не могу, и это не так просто. Буду благодарен если кто-то даст совет или объяснит как это сделать. Пробывал всякие варианты:

DateTimeFormatter format = DateTimeFormatter.ofPattern("HH'mmsss'nnn");
LocalTime time = LocalTime.parse(attributes[0],format);

и просто parse тоже пробывал

LocalTime time = LocalTime.parse(attributes[0]);

после всего этого пишет исключение:

Exception in thread "main" java.time.format.DateTimeParseException: Text '1508877719' could not be parsed at index 2

и пишет что проблема именно на той строке, в которой я пытаюсь перевести String в LocalTime.

Answer 1

Так у вас строка "1508877719", а форматер используете "HH'mmsss'nnn".

Если "1508877719" - это секунды, то вот так делайте:

long ms = Long.valueOf(attributes[0]) * 1000; // будут миллисекунды
LocalTime  time = Instant.ofEpochMilli(ms).atZone(ZoneId.systemDefault()).toLocalTime();
Answer 2

Так, число 1508877719 похоже на UnixTime 24 Oct 2017 20:41:59 GMT. Тогда все просто: переводим строку в число, а число уже во время методом Instant.ofEpochMilli(long) с указанием нужной временной зоны

String str = "1508877719";
int unixTime = Integer.parseInt(str);
LocalDateTime date =
  LocalDateTime.ofInstant(
    Instant.ofEpochSecond(unixTime), 
    ZoneId.systemDefault()
  );
System.out.println(date.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
READ ALSO
Клонирование объектов Java

Клонирование объектов Java

В классе main есть: 1) класс сlass1 в котором есть двумерный массив и еще несколько переменных 2) функция func(class1 cl) которая принимает объект класса...

207
Не сохраняет в sharedReferences из List

Не сохраняет в sharedReferences из List

Заранее благодаренЕсть MainActivity (первое) и LanguageActivity (второе)

263
Как работать с клиентской таймзоной на сервере?

Как работать с клиентской таймзоной на сервере?

Мне нужно получить таймзону клиента, для того, чтобы передать её в параметр компонента на страницеСтраница работает с бином, из которого...

268