шестнадцатеричная строка в формате datetime - PullRequest
1 голос
/ 09 декабря 2011

Я конвертирую шестнадцатеричную строку в формат даты ... Я получаю неправильное время даты со следующим ... не знаю, где я делаю ошибку.

    String s1="07:db:0c:08:16:0d:1e:00";    //2011-12-8,22:13:30.0
    s1 = s1.replaceAll(":", "");
    String year = s1.substring(0, 4);
    String month = s1.substring(4, 6);
    String day = s1.substring(6, 8);
    String hour = s1.substring(8, 10);
    String minute = s1.substring(10, 12);
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, Integer.parseInt(year, 16));
    cal.set(Calendar.MONTH, Integer.parseInt(month, 16));
    cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day, 16));
    cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));
    cal.set(Calendar.MINUTE, Integer.parseInt(minute, 16));
   System.out.println(cal.getTime());

мой вывод «Пн Ян 09 10:13:49 CST 2012» .. что не правильно (должно быть 2011-12-8,22: 13: 30.0 - формат пока игнорируется).

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Месяц в Java представлен целочисленными литералами 0..11, то есть январь равен 0, ..., а декабрь равен 11. В этом коде Integer.parseInt(month, 16) возвращает 12, что означает объект Calendar, перенесенный на январь следующего года. (по возрастанию года).

-EDIT-
Кроме того, установите HOUR_OF_DAY вместо HOUR в cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));

2 голосов
/ 09 декабря 2011

Несколько заметок:

  1. Месяц в классе календаря: от 0-11 , где 0 - январь.
  2. Формат toString можетварьируется .
  3. Вы забыли секунды:

    String second = s1.substring(12, 14);
    cal.set(Calendar.SECOND, Integer.parseInt(second, 16));
    
...