Android Unparseable日期错误

时间:2013-10-20 18:40:25

标签: java android date

我实际上想要找出两个日期之间的差异,但是会得到无法发布的日期错误 在当前日期:

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)

我在google上搜索了这个但无法解决此问题。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:0)

toLocaleString的输出可能与您在formatter1中使用的格式不匹配,因此会抛出异常。

您应该尝试查看act_dateString的样子,然后知道出了什么问题。

答案 1 :(得分:0)

如果您想将日历转换为日期,那么您可以使用此我相信

Date date_old =  new Date(cal.getTimeInMillis());

答案 2 :(得分: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();
       }

答案 3 :(得分:0)

你必须这样做才能解析日期。例如,在您的代码中,调用toLocalString()将为您提供字符串' 2013年10月20日上午12:57:28 '。这将抛出 java.text.ParseException:Unparseable date:“Oct 20,2013 12:57:28 AM 您必须输入格式为”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);

答案 4 :(得分: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-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuarter等。