Получение отрицательного значения в date.gettime () - PullRequest
0 голосов
/ 20 декабря 2018

Столкнулся с проблемой, когда я пытаюсь разобрать строковое значение в дату, и когда я пытаюсь сделать date.getTime (), я получаю отрицательное значение.

Это строка, которую я анализирую "01:00:07".и это значение в объекте даты, которое я получаю "Чт 01 января 01:00:07 GMT + 05: 30 1970".Все еще в getTime () я получаю отрицательное значение "-16193000"

Код для достижения этого:

long sum = 0;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");// I have also tried "HH:mm:ss" format. it gives same result
    Date date = simpleDateFormat.parse(duration);//duration is "01:00:07"
    sum= date.getTime();

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

java.time

    String durationString = "01:00:07";
    durationString = durationString
            .replaceFirst("(\\d{2}):(\\d{2}):(\\d{2})", "PT$1H$2M$3S");
    Duration dur = Duration.parse(durationString);
    System.out.println(dur);

A Duration выводит эту нечетную строку:

PT1H7S

Читайте как: aпериод времени 1 час 7 секунд .

Эта строка в стандартном формате ISO 8601 .A Duration может анализировать только стандартный формат.Поэтому я использую String.replaceFirst для преобразования вашей строки в нее.

Позвольте мне угадать, вам нужно подвести итог продолжительности?Для этого есть метод plus:

    Duration sum = Duration.ZERO;
    sum = sum.plus(dur);

Существуют также методы для преобразования в секунды или миллисекунды.

Не используйте класс даты-времени для длительности.Это приведет к путанице и ошибкам.

Если вы абсолютно не хотите внешних зависимостей (только до тех пор, пока не перейдете на уровень API 26), вручную проанализируйте вашу строку в секундах и представьте их в int.Оберните его в свой собственный класс.

Вопрос: Можно ли использовать java.time на Android?

Да, java.time прекрасно работает на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) современный API поставляется встроенным.
  • В Java 6 и 7 получают ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 20 декабря 2018

Проблема в смещении часового пояса.Использование:

long sum = 0;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");// I have also tried "HH:mm:ss" format. it gives same result
Date date = null;//duration is "01:00:07"
try {
    date = simpleDateFormat.parse("01:00:07");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    sum= cal.getTimeInMillis() + (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET));
    System.out.println("Date =" + date);
    System.out.println("sum =" + sum);
} catch (ParseException e) {
    e.printStackTrace();
}
0 голосов
/ 20 декабря 2018

Проблема TimeZone.Вы получите правильное время, указав TimeZone

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

или

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
0 голосов
/ 20 декабря 2018

simpleDateFormat .setTimeZone(TimeZone.getTimeZone("GMT")); Вы должны добавить свой часовой пояс

...