从字符串转换为日期时出错

时间:2013-12-26 09:43:26

标签: java date

我正在使用一种方法计算两个日期之间的天数差异。在执行计算之前,需要将日期字符串转换为日期,这导致我出现问题。

public static int difDate(String data1, String data2) throws ParseException{  
    GregorianCalendar ini = new GregorianCalendar();  
    GregorianCalendar fim = new GregorianCalendar();  
    SimpleDateFormat sdf = new SimpleDateFormat ("dd/MM/yyyy");  
    ini.setTime(sdf.parse(data1));  
    fim.setTime(sdf.parse(data2));  
    long dt1 = ini.getTimeInMillis();  
    long dt2 = fim.getTimeInMillis();  
    return (int) (((dt2 - dt1) / 86400000)+1);  
}

此代码生成异常:

12-26 07:31:38.027: E/AndroidRuntime(11452): FATAL EXCEPTION: main

12-26 07:31:38.027:E / AndroidRuntime(11452):java.lang.IllegalStateException:无法执行活动的方法 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.view.View $ 1.onClick(View.java:3673) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.view.View.performClick(View.java:4278) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.view.View $ PerformClick.run(View.java:17430) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.os.Handler.handleCallback(Handler.java:725) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.os.Handler.dispatchMessage(Handler.java:92) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.os.Looper.loop(Looper.java:213) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.app.ActivityThread.main(ActivityThread.java:5092) 12-26 07:31:38.027:E / AndroidRuntime(11452):at java.lang.reflect.Method.invokeNative(Native Method) 12-26 07:31:38.027:E / AndroidRuntime(11452):at java.lang.reflect.Method.invoke(Method.java:511) 12-26 07:31:38.027:E / AndroidRuntime(11452):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:797) 12-26 07:31:38.027:E / AndroidRuntime(11452):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564) 12-26 07:31:38.027:E / AndroidRuntime(11452):at dalvik.system.NativeStart.main(Native Method) 12-26 07:31:38.027:E / AndroidRuntime(11452):引起:java.lang.reflect.InvocationTargetException 12-26 07:31:38.027:E / AndroidRuntime(11452):at java.lang.reflect.Method.invokeNative(Native Method) 12-26 07:31:38.027:E / AndroidRuntime(11452):at java.lang.reflect.Method.invoke(Method.java:511) 12-26 07:31:38.027:E / AndroidRuntime(11452):在android.view.View $ 1.onClick(View.java:3668) 12-26 07:31:38.027:E / AndroidRuntime(11452):... 11更多 12-26 07:31:38.027:E / AndroidRuntime(11452):引起:java.text.ParseException:无法解析的日期:“26.11.2013”​​(偏移2处) 12-26 07:31:38.027:E / AndroidRuntime(11452):at java.text.DateFormat.parse(DateFormat.java:622) 12-26 07:31:38.027:E / AndroidRuntime(11452):at com.sisteplantbrasil.util.DateHelper.DiferencaEntreDatas(DateHelper.java:58) 12-26 07:31:38.027:E / AndroidRuntime(11452):at com.sisteplantbrasil.WorkOrderHistoricFilter.onBtnActionClick(WorkOrderHistoricFilter.java:222) 12-26 07:31:38.027:E / AndroidRuntime(11452):... 14更多

任何人都知道如何解决这个问题?

ini.setTime(sdf.parse(data1));  

谢谢!

1 个答案:

答案 0 :(得分:3)

您的输入是26.11.2013而不是26/11/2013。更改输入的格式或更改创建SimpleDateFormat

的方式
SimpleDateFormat(dd/MM/yyyy);

SimpleDateFormat(dd.MM.yyyy);

这就是它抛出此异常的原因