2012-03-16 239 views
1

我从用户那里获取两个日期。比较两个Groovy日期

<g:datePicker name="now"/> <g:datePicker name="early"/> 

然后,在我的控制器:

if((params.early).compareTo(params.now)==0) { 
    early=new Date(1970,1,1) 
} 
else { 
    //do something 
} 

的其他部分得到执行,即使日期是相同的。 我们如何比较groovy中的日期?

+0

如果(params.ear == params.now) \t \t \t { \t \t \t \t耳=新的日期(0160,0,1)//使日期为项目发布 \t \t \t \t log.info(耳) \t \t \t \t现在=参数的开始日。现在 \t \t \t} \t \t \t其他 \t \t \t { \t \t \t \t耳= params.ear \t \t \t \t现在= params.now \t \t \t} – nandini 2012-03-20 10:03:00

+0

这是工作只是问题是,一年是如何被interpretted。 0160是2011根据日志结果.how ???? – nandini 2012-03-20 10:04:29

回答

0

如果打印出来params.earlyparams.now您能得到什么?你确定他们不是弦乐队吗?如果他们是日期,他们是否有时间部分 - 这可能是他们不平等的原因。

你就应该能够做到:

if(params.early == params.now) { 
    early = Date.parse("yyyy/MM/dd", "1970/01/01") 
} 
else { 
    // do something 
} 

或者,如果他们有时间组件的日期,(你是在日期只是有兴趣):

if(params.early.clearTime() == params.now.clearTime()) { 
    early = Date.parse("yyyy/MM/dd", "1970/01/01") 
} 
else { 
    // do something 
} 
+0

我已经使用我已经使用从用户获取日期 – nandini 2012-03-16 11:28:34

+0

对,所以他们应该是日期。当你把它们打印出来,你确定它们是一样的吗? – 2012-03-16 11:36:42

+0

是啊,他们是完全相同的时间附加在末尾 – nandini 2012-03-16 11:40:38

0

我不确定(params.early).compareTo部分是否正确。

无论如何,为什么不使用equals而不是compareTo == 0?我的意思是:

if (params.early == params.now) { 
    //.... 
} else { 
    //.... 
} 
+0

即使这不起作用。我首先尝试了相同的代码。两者的时间都是一样的。 – nandini 2012-03-16 11:29:46

+0

你能显示'params.early'和'params.now'的实际值吗? – 2012-03-16 11:31:45

+0

如果部分未被执行,它会自动到达其他位置,即使日期相同 – nandini 2012-03-16 11:32:32

0

我会使用日期类型coersion,以确保您得到日期:

params.date('early').compareTo(params.date('now')) == 0 
+0

http://mrhaki.blogspot.com/2012/01/grails-goodness-date-request-parameter.html – 2012-03-16 14:27:56