我实际上想要找出两个日期之间的差异,但是会得到无法发布的日期错误 在当前日期:
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上搜索了这个但无法解决此问题。有人可以帮忙吗?
答案 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 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
。
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。