您好我试图将用户输入的日期(作为字符串)与当前日期进行比较,以便确定日期是早还是早。
我目前的代码是
String date;
Date newDate;
Date todayDate, myDate;
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy");
while(true)
{
Scanner s = new Scanner (System.in);
date = s.nextLine();
Calendar cal = Calendar.getInstance();
try {
// trying to parse current date here
// newDate = dateFormatter.parse(cal.getTime().toString()); //throws exception
// trying to parse inputted date here
myDate = dateFormatter.parse(date); //no exception
} catch (ParseException e) {
e.printStackTrace(System.out);
}
}
我试图将用户输入日期和当前日期都放到两个Date对象中,这样我就可以使用Date.compareTo()来简化比较日期。
我能够将用户输入字符串解析为Date对象。但是当前日期cal.getTime()。toString()由于是无效字符串而不会解析为Date对象。
如何做到这一点?提前致谢
答案 0 :(得分:7)
您可以使用以下内容获取当前Date
todayDate = new Date();
编辑:由于您需要在不考虑时间组件的情况下比较日期,我建议您看到:How to compare two Dates without the time portion?
尽管一个答案的“形式不佳”,我其实非常喜欢它:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.format(date1).equals(sdf.format(date2));
在您的情况下,您已经拥有:
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy");
所以我会考虑(为了简单而不是表现):
todayDate = dateFormatter.parse(dateFormatter.format(new Date() ));
答案 1 :(得分:3)
以下是检查给定日期时间是否大于当前日期时间的代码.Below方法将特定日期时间字符串作为参数,返回true 如果提供日期 - 时间比现在的日期时间大。 #thmharsh
private boolean isExpire(String date){
if(date.isEmpty() || date.trim().equals("")){
return false;
}else{
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss a"); // Jan-20-2015 1:30:55 PM
Date d=null;
Date d1=null;
String today= getToday("MMM-dd-yyyy hh:mm:ss a");
try {
//System.out.println("expdate>> "+date);
//System.out.println("today>> "+today+"\n\n");
d = sdf.parse(date);
d1 = sdf.parse(today);
if(d1.compareTo(d) <0){// not expired
return false;
}else if(d.compareTo(d1)==0){// both date are same
if(d.getTime() < d1.getTime()){// not expired
return false;
}else if(d.getTime() == d1.getTime()){//expired
return true;
}else{//expired
return true;
}
}else{//expired
return true;
}
} catch (ParseException e) {
e.printStackTrace();
return false;
}
}
}
public static String getToday(String format){
Date date = new Date();
return new SimpleDateFormat(format).format(date);
}
答案 2 :(得分:2)
你可以这样做。
// Make a Calendar whose DATE part is some time yesterday.
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DATE, -1);
if (myDate.before(cal.getTime())) {
// myDate must be yesterday or earlier
} else {
// myDate must be today or later
}
cal
有时间成分并不重要,因为myDate
没有。因此,当您比较它们时,如果cal
和myDate
的日期相同,则时间组件将cal
晚于myDate
,而不管时间组件是什么。< / p>
答案 3 :(得分:2)
val col1df = df.groupBy("col1").agg(round(mean("col3"),2).alias("mean_col1"))
val col2df = df.groupBy("col2").agg(round(mean("col3"),2).alias("mean_col2"))
df.join(col1df, "col1").join(col2df, "col2").select($"col1",$"col2",$"col3",$"mean_col1",$"mean_col2").show()
答案 4 :(得分:1)
创建一个新的Date()将为您提供一个具有当前日期的Date对象。
这样:
Date currentDate = new Date();
将完成这项工作
答案 5 :(得分:0)
Fomat不符合您的预期。
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime().toString());
输出:Fri Nov 01 13:46:52 EET 2013
答案 6 :(得分:0)
我建议您使用 java.time,现代 Java 日期和时间 API,用于您的日期工作。
ZoneId zone = ZoneId.of("America/Santarem");
LocalDate today = LocalDate.now(zone);
String userInput = "14-04-2021";
LocalDate myDate = LocalDate.parse(userInput, DATE_PARSER);
if (myDate.isBefore(today)) {
System.out.println(userInput + " is in the past.");
} else if (myDate.isAfter(today)) {
System.out.println(userInput + " is in the future.");
} else {
System.out.println(userInput + " is today.");
}
输出为:
<块引用>14-04-2021 已过去。
我使用这个格式化程序进行解析:
private static final DateTimeFormatter DATE_PARSER
= DateTimeFormatter.ofPattern("dd-MM-uuuu");
我评论了您从中获得异常的行:
// trying to parse current date here
newDate = dateFormatter.parse(cal.getTime().toString()); //throws exception
果然我得到了这个例外:
<块引用>java.text.ParseException:无法解析的日期:“星期五 4 月 16 日 07:37:00 CEST 2021"
您的 SimpleDateFormat
尝试解析格式为 dd-MM-yyyy
的字符串。 cal.getTime()
返回一个 Date
,toString()
上的 Date
值看起来像异常所说的 Fri Apr 16 07:37:00 CEST 2021
。这不是 dd-MM-yyyy
格式(甚至不接近)。这就是解析失败并出现您看到的异常的原因。
使用 java.time 解析今天的日期完全没有意义,因为您没有将其作为字符串获取。使用 Java 1.0 和 1.1 中旧的和麻烦的日期类,它可以用作摆脱 Date
的时间部分的一种技巧,但当时也不是推荐的方法。
Oracle tutorial: Date Time 解释如何使用 java.time。