在使用struts处理时间问题的时候,可以使用<sx:datetimepicker >标签
<sx:datetimepicker name="date" label="Order Date" displayFormat="yy-MM-dd" type="date"/>
<!--lable为输入框的标签,也就是显示在输入框前边的字-->
<!--name对应action中的变量,可以为String或Date-->
<!--displayFormat输入框里日期的显示格式,支持的字母表示在下边-->
<!--type显示的类型,有两个date和time,分别对应日期和时间-->
<sx:datetimepicker value="%{date}"/>
<sx:datetimepicker value="%{'2007-01-01'}"/>
<sx:datetimepicker value="%{'today'}"/>
<!--value表示输入框里的显示默认值,可以为变量,也可以为具体的日期。today则表示今天的日期-->
显示格式支持的字母表示
d 相对于每个月的天数
D 相对于每年的天数
M 经我试验,MM显示数字例如'09',MMM显示汉字例如'一月',但是有乱码,不知道是什么原因
y 年
h 12小时制的小时
H 24小时制的小时
m 分钟
s 秒
可以指定type=date,这样的话就好解决了。
这里,我只是 约束displayFormat="yyyy-MM-dd"
年龄范围<sx:datetimepicker name="min" label="从" displayFormat="yyyy-MM-dd"></sx:datetimepicker>
<sx:datetimepicker name="max" label="至" displayFormat="yyyy-MM-dd"></sx:datetimepicker>
所以传过来的格式很乱。但是,我们可以这样处理。
String min=request.getParameter("min").substring(0,10);
String max=request.getParameter("max").substring(0,10);
mindate =Date.valueOf(min);
maxdate=Date.valueOf(max);
就可以获得java.sql.Date的类型了
可以了解一下SimpleDateFormat,DateFormat有什么用!
当然,这里可以不必转成Date型再进行比较,数据库可以处理String类型的时间比较。
String min=request.getParameter("min").substring(0,10);
String max=request.getParameter("max").substring(0,10);
截断就好了。在SQL语句这样写。
String jpql = "select student from Student student where student.birthday between "+min +"and "+max +"' and student.clas.class_Name=? ";这样写执行可以成功,但是检索不了记录。min,max必须当做字符串来处理.'min','max'
sql语句
String jpql = "select student from Student student where student.birthday between '"+min +"' and '"+max +"' and student.clas.class_Name=? ";
执行成功且查出数据。
总结:查询数据库中传过来的时间格式可以使String类型的,但是,必须需要''来引起来。否则,执行成功但是没有数据。因为,数据库比较时间大小处理的是'2011-2-12'而不是2011-2-12