这里的问题是,我有以下代码:
String newPattern = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat formatterDB = new SimpleDateFormat(newPattern);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String nDate1 = rs.getString("FromDate");
String nDate2 = rs.getString("ToDate");
Date newDate1 = formatterDB.parse(nDate1);
Date newDate2 = formatterDB.parse(nDate2);
Date sd = formatter.parse("2013-08-22");
Date ed = formatter.parse("2013-08-24");
Date exd = formatter.parse("2013-08-23");要验证的第一个条件是,exd位于sd,ed之间,如果为真,则exd也应位于newDate1,newDate2之间,如果为真,则将从dB中获取其他元素。
请不要认为这两个日期的来源是不同的,其中一个日期来自具有完全不同格式的dB,而另一个日期是作为字符串输入给出的,它们需要进行比较,因此它们有不同的格式。
为了更清楚地说明这一点,下面是一个例子:
我在2013-08-23给出了
exd的输入,sd和ed的输入给出了newDate1为2013-08-28( dB格式),newDate2为2013-09-01( dB格式),但它接受输入exd并获取另一列。
**我已经摘录了相关代码,对于任何问题,请输入评论。任何帮助都是非常感谢的。提前谢谢!
发布于 2014-02-27 05:25:16
您必须使用java内置日期功能。
下面是一个小例子:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2009-12-31");
Date date2 = sdf.parse("2010-01-31");
if(date1.compareTo(date2)>0){
System.out.println("Date1 is after Date2");
}else if(date1.compareTo(date2)<0){
System.out.println("Date1 is before Date2");
}else if(date1.compareTo(date2)==0){
System.out.println("Date1 is equal to Date2");
}else{
System.out.println("How to get here?");
}编辑:与用户问题有关的示例
exd是not between newDate1和newDate2!
public class DateCompare {
public static void main(String args[]) throws ParseException
{
String newPattern = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat formatterDB = new SimpleDateFormat(newPattern);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String nDate1 = "2013-08-29 11:11:11.000";
String nDate2 = "2013-09-01 11:11:11.000";
Date newDate1 = formatterDB.parse(nDate1);
Date newDate2 = formatterDB.parse(nDate2);
Date sd = formatter.parse("2013-08-22");
Date ed = formatter.parse("2013-08-24");
Date exd = formatter.parse("2013-08-23");
//Comparing exd to sd and ed
if(sd.compareTo(exd) * exd.compareTo(ed) > 0)
{
//comparing exd to newDate1 and newDate2
if(newDate1.compareTo(exd) * exd.compareTo(newDate2) > 0)
{
System.out.println("Success : Now you can fetch data from DB !");
}
else
{
System.out.println("Oops ! Can't fetch data !");
}
}
}
}请注意,在这个场景中,如果比较不同格式的日期,if the dates are same, they won't return 0,因为time factor!时间也将进行比较,yyyy-MM-dd格式的日期都以HH:mm:ss.SSS为00:00:00.000。
发布于 2014-02-27 05:41:46
这里有一个处理这个问题的方法.
int flag=0;
if(exd.compareTo(sd)>0 )
if(exd.compareTo(ed)<0){
System.out.println(exd+" Lies between"+ sd +"and"+ ed);
flag=1;
}
/*convert from newPattern to "yyyy-MM-dd"*/
SimpleDateFormat formatterDB = new SimpleDateFormat(newPattern);
Date temp = formatterDB.parse(nDate1);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String temp1 = formatter.format(temp);
Date newDate1 = formatter.parse(temp1);
if(flag==1)
if(exd.compareTo(newDate1)>0)
if(exd.compareTo(newDate2)<0){
/* your code to fetch other item from DB*/
}发布于 2014-02-27 09:49:05
简短回答
我的这两个答案同时包含了解决问题所需的概念和示例代码:
日期与日期-时间
您有一些日期值和一些日期时间值。您需要就日期唯一值与日期-时间的关系作出决定。
一种可能是,只有约会才被认为是一天中的第一分钟,比如2014-01-02 00:00:00。请注意,第一时刻的时间通常是00:00:00,但不一定是因为夏时制或其他异常可能会移动时间。例如,01:00:00。Joda-Time将自动将时间调整为一天中的第一分钟,此时将只将日期字符串解析为日期时间。但是请注意,您也可以调用withTimeAtStartOfDay (忽略“午夜”-related类/方法,因为它们实际上被创建者所反对)。
另一种可能是,日期只应表示为一段时间,从一天的第一分钟到第二天的第一分钟。
半开
请注意,我指的是“半开放”的方法,其中开始是包容性的,结束是排他性的。半开式一般对时间跨度最有效。
有关半开放时间跨度的更多讨论和示例,请参见我的这个答案和这个答案。
先解析,然后再处理
首先将日期字符串和日期字符串解析为日期时间对象。一旦您手头有一些合理的对象,然后继续您的比较和业务逻辑。
尤达-时间
java.util.Date和.Calendar类是出了名的麻烦。避开他们。
相反,可以使用开源库尤达-时间或Java8中的新java.time包。
Joda-Time提供了三个类来处理一段时间:期间、持续时间和间隔。它们包括非常方便的比较方法,包括contains、abuts、overlap和gap。
搜索StackOverflow
搜索"joda间隔“以查找其他示例。
https://stackoverflow.com/questions/22059696
复制相似问题