比较Java 6中的字符串日期和当前日期



这是一个将输入字符串日期(expdate(与当前日期(今天(进行比较的程序,只有当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 6的java.time和ThreeTen Backport

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

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

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

这对我的Java 6有用吗

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

  • 在Java 8及更高版本中,以及在较新的Android设备上(从API 26级开始(,现代API内置。在这种情况下,从带有子包(而不是org.threeten.bp(的java.time包中导入类
  • 在Java6和7中,获得ThreeTen Backport,即新类的Backport(JSR310的ThreeTen;请参阅底部的链接(
  • 在(旧的(安卓系统上使用安卓版的ThreeTen Backport。它被称为ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类

您的代码出了什么问题

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

SimpleDateFormat类通常只会给您一个不正确的结果,并假装一切都很好。这只是那个班的许多麻烦之一。我建议使用现代java日期和时间API java.time的原因之一。

链接

  • Oracle教程:日期-时间,解释如何使用java.time
  • Java规范请求(JSR(310,其中首次描述了java.time
  • ThreeTen Backport项目,java.time到Java 6和7的Backport(JSR-310的ThreeTen(
  • ThreeTenABP,安卓版ThreeTen背包
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释

最新更新