2014-10-27 7 views
-1

У меня есть следующие две даты в строковом формате и вы хотите получить прошедшее время для них.Как вычесть время начала из времени остановки

Date elapsed = new Date(
       new SimpleDateFormat().parse("10/17/2014, 2:19:22 PM").getTime() 
       - new SimpleDateFormat().parse("10/17/2014, 2:19:32 PM").getTime()); 
System.out.println("Elapsed Time: " + elapsed); 

Однако, я получаю ...ParseException: Unparseable date: "10/17/2014, 2:19:22 PM" Кто-нибудь знает почему?

Примечание: вот как я получил дату, которую вы видите в блоке синтаксического анализа генерируется new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time)

ответ

2
  • Вы должны указать формат в SimpleDateFormat конструктор.
  • Вашего String имеет форматdd/MM/yyyy, hh:mm:ss a
  • Ваша логика вычитания некорректна, так как это даст вам разницу long значения между датами и вы создаете дату от того значения, которое не действительный .FOR что вы должны получить точную разницу от той длинной value.You придется делить диф с (1000 * 60) получить минут, (1000 * 60 * 60) получить секунд и (1000 * 6 0 * 60 * 24), чтобы получить дни.

    SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy, hh:mm:ss a"); 
    long diff = sdf.parse("10/17/2014, 2:19:22 PM").getTime() 
             - sdf.parse("10/17/2014, 2:18:32 PM").getTime(); 
    System.out.println("Difference : " + (diff/(1000d * 60)) +" Minutes"); 
    

Примечание:1000d используется для выполнения арифметических операций с плавающей точкой здесь.

1

Однако, я получаю ... ParseException: дата не поддается синтаксическому анализу: «10/17/2014, 2:19:22 PM «Кто-нибудь знает, почему?

Потому что вы не сказали SimpleDateFormat, какой будет формат строки. Используйте один из конструкторов, который accepts a pattern string так, чтобы он знал, чего ожидать.

+1

Это то, что я получил «новый SimpleDateFormat (« yyyy-MM-dd HH: mm: ss »). Parse (« 10/17/2014, 2:19:22 »). GetTime()' и я все еще получить ту же ошибку. –

+0

@ Простое решение: прочитайте документацию для 'SimpleDateFormat'. 'HH' означает ** две ** цифры в час. На вашем входе только один. (Он также ожидает диапазон от 0 до 23, я подозреваю, что вы имеете дело с 1-12.) Вероятно, вы ищете 'h' (и только один из них). –

Смежные вопросы