将字符串日期与 Java 中的当前日期进行比较 6

Compare string date with current date in Java 6

这是一个将输入字符串日期 (expdate) 与当前日期 (today) 进行比较的程序,并且 returns "valid Expiry Date" 仅当 expDate 大于当前日期时。

import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/* Name of the class has to be "Main" only if the class is public. */
class expiryDateLogic
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String expdate = "07-11-2018"; // Text Date Input
        if (!expdate.equals("")) { // If null no checking
            DateFormat format = new SimpleDateFormat("dd-mm-yyyy");
            Date expDate = (Date) format.parse(expdate); // Convert expdate to type Date
            SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
            Date current = new Date();
            String td = formatter.format(current);
            Date today = (Date) formatter.parse(td); // Current date
            System.out.println(today);
            System.out.println(expDate);
            // System.out.println(expDate.compareTo(today));
            if (expDate.before(today)) { // Date Comparison
                System.out.println("Invalid Expiry Date");
            } else {
                System.out.println("Valid Expiry Date");
            }
        } else {
            System.out.println("No Expiry Date Present");
        }
    }
}

如果 expDate 是当前日期,则此代码不起作用。请帮忙

java.time 和 ThreeTen 向后移植 Java 6

import org.threeten.bp.LocalDate;
import org.threeten.bp.ZoneId;
import org.threeten.bp.format.DateTimeFormatter;

public class ExpiryDateLogic {

    public static void main(String[] args) {
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
        ZoneId zone = ZoneId.of("Asia/Kolkata");

        String expDateString = "07-11-2018"; // Text Date Input
        if (expDateString.isEmpty()) {
            System.out.println("No Expiry Date Present");
        } else {
            LocalDate expDate = LocalDate.parse(expDateString, dateFormatter);
            LocalDate today = LocalDate.now(zone);
            System.out.println("Today:      " + today);
            System.out.println("Expiration: " + expDate);
            if (expDate.isBefore(today)) {
                System.out.println("Invalid Expiry Date");
            } else {
                System.out.println("Valid Expiry Date");
            }
        }
    }

}

我今天(11月9日)运行时的输出:

Today:      2018-11-09
Expiration: 2018-11-07
Invalid Expiry Date

A LocalDate 是没有时间的日期,因此似乎比老式 Date 更符合您的要求,尽管它的名称是时间点,而不是日期.所以上面的代码也比你的代码简单。

由于所有时区的日期都不同,我明确指定时区以获得可预测的结果。

这对我的 Java 6 有用吗?

是的,java.time 只需要至少 Java 6(我已经在 Java 7 上测试了上面的代码)。

  • 在 Java 8 和更高版本以及较新的 Android 设备(来自 API 级别 26)中,现代 API 是内置的。在这种情况下,从带有子包的 java.time 包中导入 classes (not org.threeten.bp).
  • 在 Java 6 和 7 中获取 ThreeTen Backport,新 classes 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。

你的代码出了什么问题?

在你的两个格式化程序中,你使用 mm 作为月份,这是错误的。小写 mm 表示小时中的分钟数。对于月份,您需要使用大写 MM。所有格式模式字母都区分大小写。

SimpleDateFormat class 的典型做法就是给你一个错误的结果并假装一切正常。这只是 class 的众多麻烦之一。这也是我建议使用 java.time 现代 Java 日期和时间 API 的众多原因之一。

链接