2015-04-17 2 views
0

Я хочу читать дату и время с устройства с помощью joda. Я делаю BCD для преобразования Струнного и я пытаюсь дата и время, как это прочитать:Чтение Дата и время исключения

String s = BCDtoASCII(resultBuff, 6, 8, false); 
DateTime dt = new DateTime 
(
(Integer.parseInt(s.substring(0, 4))), // year 
(Integer.parseInt(s.substring(4, 2))),  // month 
(Integer.parseInt(s.substring(6, 2))),  // day 
(Integer.parseInt(s.substring(8, 2))),  // hour 
(Integer.parseInt(s.substring(10, 2))), // minute 
(Integer.parseInt(s.substring(12, 2)))// seconds 
); 

Но я получаю это исключение:

FATAL ИСКЛЮЧЕНИЕ: Thread-14838 процесс: ком .calculator.gent.bluetoothcommocation, PID: 17683 java.lang.StringIndexOutOfBoundsException: length = 16; regionStart = 4; regionLength = -2 на java.lang.String.startEndAndLength (String.java:504) в java.lang.String.substring (String.java:1333)

ответ

2

Как было указано здесь, в Javadoc первой Параметр - это начальный индекс, а второй - индекс конца, а не длина.

Так что вы должны сделать что-то вроде этого:

Integer.parseInt(s.substring(4, 6)); 
+0

Я, начиная с 0 и читать год, который имеет 4-х цифр, а затем начать с 4 и месяц чтения с 2 цифрами и так далее ... Я не вижу никакой проблемы здесь. – Gent

+0

Спасибо, Flown, после того, как я посмотрел на Javadoc, я получил ответ. – Gent

0

Найдено решение:

String s = BCDtoASCII(resultBuff, 6, 8, false); 
DateTime dt = new DateTime 
(
(Integer.parseInt(s.substring(0, 4))), // year 
(Integer.parseInt(s.substring(4, 6))),  // month 
(Integer.parseInt(s.substring(6, 8))),  // day 
(Integer.parseInt(s.substring(8, 10))),  // hour 
(Integer.parseInt(s.substring(10, 12))), // minute 
(Integer.parseInt(s.substring(12, 14)))  // seconds 
);