对相同的表执行了不同的sql,返回相同的日期Date页面得到的数据却不同。
不同之处在于:
上面取回的数据使用了Mybatis的拦截器进行分页,下面的是直接用了对bean的映射返回的。前者应该是调用了Date的getTime()方法,后者直接放回了Date对象,但是在用EL表达式取值的时候,自动调用了toString()方法。
在下面的取值方式中,可以使用jstl的
对date对象进行格式转换。但是上面返回的long类型的时间就不能格式转换了。
<fmt:formatDate value="${tfFCardcoupons.cardEndTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
实验:
fmt:formatDate value="<%=date.getTime() %>" pattern="yyyy-MM-dd HH:mm:ss"/>
fmt:formatDate value="<%=date.toString() %>" pattern="yyyy-MM-dd HH:mm:ss"/>
总结:用了PageHelper拦截器,得到的数据返回给了js,需要将long的时间还原为date对象,才能正确显示时间。不过幸好,可领取卡券页并没有要显示时间。
//得到当前时间
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.format(date);//2017-07-03 00:55:02
//对Date设定特定的时间
Date dt = df.parse("2017-06-19 00:00:00");
System.out.println(date.toString());//Mon Jun 19 00:00:00 CST 2017
//向oracle数据库插入特定的时间戳
两个构造函数
Date date = new Date(System.currentTimeMillis());
Date date = new Date();//内部也是通过系统的epoch毫秒数但会date对象的
用date对象得到得到从1970年1月1日0分0秒0毫秒(Unix余年)至今的毫秒数
date.getTime();
除了上面的两个构造函数,和getTime()函数,其他的构造函数以及get方法set方法都已经废除,因此,不应该对date对象进行设置值,date的唯一作用就是得到epoch,而操作date需要用到java.text.DateFormat抽象类。
基本使用由两种
第一种用SimpleDateFormat的format()方法传入date对象
第二种是用DateFormat的三个静态方法
//DATE
getDateInstance(LONG).format(new Date());
getDateInstance(SHORT).format(new Date());
//TIME
getTimeInstance(LONG).format(new Date());
getTimeInstance(MEDIUM).format(new Date());
getTimeInstance(SHORT).format(new Date());
//date time 2*3=6种格式
getDateTimeInstance(LONG,LONG).format(new Date());
getDateTimeInstance(LONG,MEDIUM).format(new Date());
getDateTimeInstance(LONG,SHORT).format(new Date());
Date应该作为时间轴上的瞬时代表,要格式化时间日期通过DateFormat,如果要去的某个时间日期信息,或者对时间日期进行操作,可以使用Calendar实例。
Calendar是个抽象类,java.util.GergorianCalendar是其子类,操作了儒略历和格里高历的混合历。通过Calendar的getInstance()去的的Calendar实例,默认就是取得GergorianCalendar实例。
1582年颁布,将儒略历的1582年18月3日星期四的隔天,定为格力高历1582年10月15日星期五。
各个国家改历的事件不同,英国的改历事件在1752年9月初,因此在Unix/Linux中查询1752年月历,9月份会平白少了11天。
我的新bash背景好好看。
在java的Calendar中也可以看到1582年的时间变化
Calendar的常用方法:
输入年月,输出当年当月的日历。
构造方法–不是用new 而是用静态方法进行构造
LocalTime localTime = LocalTime.of(0,0,0);
LocalDate localDate = LocalDate.of(2017,7.2)
//常用方法:plusDays() plusMonths() plusWeeks()都是返回一个新的LocalDate对象
//of返回的都是一个新的localTime或者localDate对象
//跟被lombok的@getter和@setter注解过的属性一样
//Fluent API 概念
System.out.println(LocalDate.of(2017.7.2).plusDays(5).plusMonths(5).plusWeeks(3).format(ofPattern(E MM/dd/yyyy)));
//每调用一个方法,返回一个新对象,内存不会炸吗,堆够用吗,那就是够用吧,垃圾回收。java真是智能。
JDK8的java.time套件中的类采用的的是单一的ISO8601年历系统
iso8601不是年历系统,而是时间日期表示方法的标准。iso8601在数据定义上大部分与格力高历相同,也有的轻微差别例如:iso8601中定义19世纪是指1900年至1999年(包含该年)[iso8601认为我们现在是20世纪啊,跟我们现在的生活不符呢],格力高历的19世纪是1801年值1900年(包含该年).
如果需要其他年历系统,引入java.time.chrono.*操作的java.time.chrono.Chronology接口的类。
LocalDate birth = LocalDate.of(1975,5,26);
MinguoDate mingoBirth = MinguoDate.from(birth);
System.out.println(mingoBirth);//Minguo ROC 64-05-26
//民国日历与当前日期的转换
System.out.println(MinguoDate.of(64,5,1).atTime(LocalTime.of(3,30,0)));//民国64年5月1日3时30分
我要记住的只是:
Date date = new Date();//
date.getTime();//用来比较时间
<fmt:formatDate value="date对象实例" pattern="yyyy-MM-dd HH:mm:ss"/>
update tf_f_coupon set card_end_time = toDate('2017-06-30','yyyy-mm-dd hh24:mi:ss ')
where card_id='43' --调整卡券的时间进行测试