比较日期?
我正在尝试比较Android中的两个日期,但我得到了这个
当我写这个
SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy"); String valid_until = "26052018"; final Date strDate = sdf.parse(valid_until);
如果我把尝试和这样的抓住
我无法比较日期,因为它说我没有声明strDate
。
SimpleDateFormat
是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期→文本),解析(文本→日期)和规范化。
好方法
- 您应该使用PROPER日期格式。
DEMO
Date strDate=null; // Declare as global; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); String valid_until = "26/05/2018"; strDate = sdf.parse(valid_until); if (new Date().after(strDate)) { }
您可以访问Best way to compare dates in Android
。
TL;博士
你的问题不是关于比较日期。 您的问题是尝试从其范围之外引用局部变量。
范围
在您尝试使用strDate
onClick
方法中:
if( new Date().after( strDate ) )
……范围内没有这样的变量strDate
。 方法没有看到在其他方法(*)中定义的局部变量。 这就是为什么它们被称为“本地”,它们不存在于定义它们的方法之外。
范围可以更窄。 在花括号内声明的局部变量(例如在if
语句中)在这些花括号之外不存在。
要从另一个方法访问strDate
,您必须使其可用。 一种方法是在调用方法时将变量作为参数传递。 另一种方法是将变量声明为类的成员,如果两个地方都填充并在同一个类中使用变量。
java.time
正如其他人所指出的那样,你应该避免使用非常棘手的旧日期时间类,例如java.util.Date
。 几年前,业界领先的java.time类取代了这些。
LocalDate.parse( "26052018" , DateTimeFormatter.ofPattern( "ddMMuuuu" ) )
搜索Stack Overflow以了解如何将字符串解析为LocalDate
对象。
并避免使用问题中所示的自定义日期格式。 只要有可能,请坚持使用标准的ISO 8601格式。 对于仅限日期的值,即YYYY-MM-DD。 再次,搜索Stack Overflow来学习。
LocalDate.parse( "2018-05-26" )
(*)方法有一些迂回的方法来查看在其他方法中定义的局部变量。 这些包括反思/内省和内部类。 但它们是特殊情况。
用它来比较两个日期
首先将String转换为日期对象
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss", Locale.US); Date d1, d2; try { d1 = inputFormat.parse(yourStringDate); d2 = inputFormat.parse(yourStringDate); return d2.compareTo(d1); } catch (ParseException e) { e.printStackTrace(); return 0; }
试试这个
@Override public void onClick(View v) { SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy"); String valid_until = "26052018"; Date strDate = null; try { strDate = sdf.parse(valid_until); if(new Date().after(strDate)){ startActivity(new Intent(MainActivity.this,Error.class)); } } catch (ParseException e) { e.printStackTrace(); } }
- Javah:错误:无法访问android.support.v7.app.ActionBarActivity
- 我的AsyncTask中的NullPointerException
- 使用Android Studio将iTextG包含在Android项目中
- 什么是IndexOutOfBoundsException? 我该如何解决?
- 如何在android中关闭两个音频文件
- 在Android问题上播放带有MediaPlayer类的mp3
- quickblox android中的多个附件
- 由于Gradle失败,无法编译任何Android项目:找不到javax.xml.datatype.DatatypeFactory
- Dagger 2 – 使用@Named无法正常注入多个相同类型的对象