2013-10-20 31 views
0

其實我wnat找到兩個日期之間的差異,但在CURENT日獲得unparceable日期錯誤 :的Android無法解析的日期錯誤

String act_dateString; 

     Calendar cal = Calendar.getInstance(); 
      act_dateString = cal.getTime().toLocaleString(); 


     SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy/MM/dd"); 

     Date date_old = null; 

      try { 
       date_old = formatter1.parse(act_dateString); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

logcat中顯示:

10-21 00:03:34.904: W/System.err(770): java.text.ParseException: Unparseable date: Oct 21, 2013 12:03:34 AM 
10-21 00:03:34.904: W/System.err(770): at java.text.DateFormat.parse(DateFormat.java:645) 
10-21 00:03:34.914: W/System.err(770): at com.example.datesdifference.MainActivity.showDifference(MainActivity.java:60) 
10-21 00:03:34.914: W/System.err(770): at com.example.datesdifference.MainActivity.onCreate(MainActivity.java:25) 
10-21 00:03:34.914: W/System.err(770): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
10-21 00:03:34.914: W/System.err(770): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
10-21 00:03:34.914: W/System.err(770): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
10-21 00:03:34.914: W/System.err(770): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
10-21 00:03:34.914: W/System.err(770): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
10-21 00:03:34.914: W/System.err(770): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-21 00:03:34.914: W/System.err(770): at android.os.Looper.loop(Looper.java:123) 
10-21 00:03:34.914: W/System.err(770): at android.app.ActivityThread.main(ActivityThread.java:4627) 

我已經在搜查這谷歌,但無法解決這個問題。任何人都可以幫忙嗎?

+0

爲什麼要將日期轉換爲字符串,然後解析它?編程有一個簡單的規則。只有在您想將其顯示給用戶時,纔將日期轉換爲字符串,將其存儲在僅存儲字符串或將其傳遞給其他應用程序的地方。 – Simon

+0

其實act_dateString是存儲在Sqlite數據庫中並在遊標中返回的日期。 – user2011302

回答

0

可能toLocaleString的輸出與您在formatter1中使用的格式不匹配,因此引發異常。

你應該試着看看act_dateString的樣子,然後你就知道出了什麼問題。

0

如果你要轉換的日曆日期,那麼你可以使用這個我相信

Date date_old = new Date(cal.getTimeInMillis()); 
0
String act_dateString; 
    SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy/MM/dd"); 
    Calendar cal = Calendar.getInstance(); 
    Date date_old = null; 
    act_dateString =formatter1.format(cal.getTime()); 
     try { 
      date_old = formatter1.parse(act_dateString); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
0

你要做這種方式來解析日期。例如,在您的代碼中,調用toLocalString()會爲您提供字符串'2013年10月20日12:57:28上午'。這將拋出java.text.ParseException:Unparseable date:「2013年10月20日上午12點57分28秒你必須輸入一個格式爲」yyyy/MM/dd「的日期字符串,爲此你必須將日期格式字符串格式「YYYY/MM/DD」,那麼,它就能解析輸入字符串

String DATE_FORMAT_NOW = "yyyy/MM/dd"; 
    Calendar cal = Calendar.getInstance(); 
    Date date = null; 
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); 
    String dateInStringFormat = sdf.format(cal.getTime()); 
    try { 
     //parsing the date string with format "yyyy/MM/dd" 
     date = sdf.parse(dateInStringFormat); 
     System.out.println(date.toLocaleString()); 
    } catch (ParseException ex) { 
     Logger.getLogger(DateTest.class.getName()).log(Level.SEVERE, null, ex); 
    } 

希望你能理解爲什麼例外,現在拋出,要查找兩個日期之間的差異天,

long diffInDays = (newerDate.getTime() - olderDate.getTime())/(1000*60*60*24); 
    System.out.println(diffInDays); 
0

您現在使用由java.time類取代了麻煩的舊的遺留日期時類。

您的輸入字符串幾乎是標準的ISO 8601格式。用連字符替換斜線字符。

LocalDate ld = LocalDate.parse("2016/01/02".replace("/" , "-")) ; 

確定今天的日期需要一個時區,因爲在任何給定的時刻,日期因地區而異。

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(z); 

ThreeTen-Extra項目與其他類擴展java.time。 Days類將時間跨度表示爲天。

int days = Days.between(ld , today).getAmount() ; 

關於java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。

大部分的java.time功能後移植到Java 6 和ThreeTenABP還適於Android(見How to use…)。

ThreeTen-Extra項目擴展java.time與其他類。這個項目是未來可能增加java.time的一個試驗場。你可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuarter,等等。