我正在尝试比较Android中的两个日期,但我得到了这个
当我写这个
SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
String valid_until = "26052018";
final Date strDate = sdf.parse(valid_until);
如果我把这个试试并且像这样抓住
我无法比较日期,因为它说我没有声明strDate
。
答案 0 :(得分:1)
SimpleDateFormat
是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期→文本),解析(文本→日期)和规范化。
好方法
<强>样本强>
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)) {
}
答案 1 :(得分:1)
您的问题并非与比较日期有关。您的问题是尝试从其范围之外引用局部变量。
在您尝试使用onClick
的{{1}}方法中:
strDate
......范围内没有这样的变量if( new Date().after( strDate ) )
。方法没有看到在其他方法(*)中定义的局部变量。这就是为什么它们被称为“本地”,它们不存在于定义它们的方法之外。
范围甚至可以更窄。在花括号内声明的局部变量(例如在strDate
语句中)在这些花括号之外不存在。
要从其他方法访问if
,您必须使其可用。一种方法是在调用方法时将变量作为参数传递。另一种方法是将变量声明为类的成员,如果两个地方都填充并在同一个类中使用变量。
正如其他人所指出的那样,你应该避免使用非常麻烦的旧日期时间类,例如strDate
。几年前,业界领先的 java.time 类取代了这些。
java.util.Date
搜索Stack Overflow以了解如何将字符串解析为LocalDate.parse(
"26052018" ,
DateTimeFormatter.ofPattern( "ddMMuuuu" )
)
个对象。
并避免使用问题中所示的自定义日期格式。只要有可能,请坚持使用标准的ISO 8601格式。对于仅限日期的值,即YYYY-MM-DD。再次,搜索Stack Overflow来学习。
LocalDate
(*)有一些迂回方法可以查看其他方法中定义的局部变量。这些包括反思/内省和内部类。但它们是特殊情况。
答案 2 :(得分:0)
用它来比较两个日期
首先将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;
}
答案 3 :(得分: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();
}
}