比较日期?

时间:2018-06-15 05:56:27

标签: java android date compare date-comparison

我正在尝试比较Android中的两个日期,但我得到了这个

notification

当我写这个

    SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
    String valid_until = "26052018";
    final Date strDate = sdf.parse(valid_until);

如果我把这个试试并且像这样抓住

try n catch

我无法比较日期,因为它说我没有声明strDate

can't compare

4 个答案:

答案 0 :(得分:1)

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期→文本),解析(文本→日期)和规范化。

好方法

  • 您应该使用 PROPER 日期格式。

<强>样本

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

答案 1 :(得分:1)

TL;博士

您的问题并非与比较日期有关。您的问题是尝试从其范围之外引用局部变量。

范围

在您尝试使用onClick的{​​{1}}方法中:

strDate

......范围内没有这样的变量if( new Date().after( strDate ) ) 。方法没有看到在其他方法(*)中定义的局部变量。这就是为什么它们被称为“本地”,它们不存在于定义它们的方法之外。

范围甚至可以更窄。在花括号内声明的局部变量(例如在strDate语句中)在这些花括号之外不存在。

要从其他方法访问if,您必须使其可用。一种方法是在调用方法时将变量作为参数传递。另一种方法是将变量声明为类的成员,如果两个地方都填充并在同一个类中使用变量。

java.time

正如其他人所指出的那样,你应该避免使用非常麻烦的旧日期时间类,例如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();
              }
        }