2015-12-31 3 views
2

Я пытаюсь проанализировать дату ввода строки по дате. он не может обнаружить тег AM/PM на входе. Он должен добавить время до указанной даты и даты возврата. Но его невозможно разобрать тег AM/PM. 03:00 PM разобран до 03:00:00 по дате. Это должно быть 15:00:00.SimpleDateFormat Ошибка синтаксического анализа с AM/PM

выход: Дата: Вт 22 декабря 3:00:00 UTC 2015 Календарь: Вт 22 декабря 11:15:00 UTC 2015 Результат: 2015-12-22 11:15 утра

Am I используя неправильный формат даты?

Вот мой код:

import java.util.*; 
import java.text.*; 
public class Main { 
    public static void main(String[] args) throws Exception { 
     System.out.println("Result : "+Main.addHoursToDate("2015-12-22 03:00 `enter code here`PM",8,15,0)); 
    } 

    public static String addHoursToDate(String date, int hoursToAdd, int minsToAdd, int secToAdd){ 
     String result = ""; 
     try{ 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm aa"); 
      Date dt = sdf.parse(date); 

      System.out.println("Date : " + dt.toString()); 

      Calendar cl = Calendar.getInstance(); 
      cl.setTime(dt); 
      cl.add(Calendar.HOUR_OF_DAY, hoursToAdd); 
      cl.add(Calendar.MINUTE, minsToAdd); 
      cl.add(Calendar.SECOND, secToAdd); 

      SimpleDateFormat dfCal = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 

      result = Main.formatDate(cl.getTime().toString(),"EEE MMM dd HH:mm:ss z yyyy","yyyy-MM-dd HH:mm aa"); 

      System.out.println("Calender : " + cl.getTime().toString()); 

     }catch(Exception e){ 
      return e.toString(); 
     } 
     return result; 
    } 

    public static String formatDate(String date, String currentFormat, String requiredFormat) throws Exception { 
     String result = ""; 
     boolean flag = false; 
     try { 
      SimpleDateFormat currentFormatter = new SimpleDateFormat(currentFormat); 
      Date currentDate = currentFormatter.parse(date); 

      flag = date.equals(currentFormatter.format(currentDate)); 
      if (!flag){ 
       throw new Exception(); // We are throwing this exception because the date has been parsed "successfully" 
       // but still we are not sure that it has been parsed "correctly"!!! 
      } 
      SimpleDateFormat requiredFormatter = new SimpleDateFormat(requiredFormat); 
      result = requiredFormatter.format(currentDate); 
     }catch (Exception e){ 
      return ""; 
     } 

     return result; 
    } 

} 
+1

Попробуйте использовать новую DATETIME библиотеку в Java 8: http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html – alextsil

ответ