datetime:
1.允许为空值、可以自定义值,系统不会自动修改其值。
2.不可以设定默认值,所以在不允许为空值的情况下,所以手动指定datetime字段的值才能成功插入数据。
3.虽然不可以设定默认值,但是可以指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。
显示格式 YYYY-MM-DD HH:mm:ss 显示范围 1601-01-01 到 9999-01-01 (sql)
end:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。
timestamp:
1.允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
2.默认值为CURRENT_TIMESTAMO(),其实也就是当前的系统时间。
3.数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,对应的记录timestamp值 会自动更新为当前的系统时间。
显示格式 YYYY-MM-DD HH:mm:ss 显示范围 1601-01-01 00:00:00 到 9999-12-31 23:59:59 (sql)
end:timestamp类型适合记录数据的最后修改时间,因为只要你更改了记录中的其他字段的值,timestamp字段的值都会自动更新
date:
显示格式 YYYY-MM-DD 显示范围 1601-01-01 00:00:00 到 9999-12-31 23:59:59 (sql)
time:
显示格式 HH:mm:ss 显示范围 00:00:00 到 23:59:59 (sql)
calendar:
在处理日期和时间时,系统推荐使用Calendar进行实现。再设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一点。
Calednar类时抽象类,且Calendar类的构造方法时protected的,所以无法使用Calendar类的构造方法来创建对象,API提供了getInstance方法用来创建对象。
使用该方法获取的Calendar对象就代表当前的系统时间,由于Calendar类tostring实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。
Calendar c1=Calendar.getInstance();
c1.set(2019,12-1,21);
使用Calendar类代表特定的时间,首先需要创建一个Calendar的对象,然后再谁都能该对象中的年月日参数来完成。
以上示例设置的时间为2019年12月21日。其参数的结构和Date类不一样,Calendar类中的年份的数值直接书写,月份的值为实际的月份减1,日期的值是实际日期的值。
Calendar.YEAR:年份、Calendar.MONTH:月份、Calendar.DATE:日期
Calendar.DAY_OF_MONTH:日期,和上面的字段完全相同、Calendar.HOUR:12小时制的小时数、Calendar.HOUR_OF_DAY:24小时制的小时数
Calendar.MINUTE:分钟、Calendar.SECOND:秒、Calendar.DAY_OF_WEEK:星期几
c1.set(Calendar.DATE,10);
该代码的作用是将c1对象代表的时间中日期设置为10号,其他所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。
Caledar c2=Calendar.getInstance();
int year=c2.get(Calendar.YEAR); int month = c2.get(Calendar.MONTH) + 1; int date = c2.get(Calendar.DATE); int hour = c2.get(Calendar.HOUR_OF_DAY);
int minute = c2.get(Calendar.MINUTE); int second = c2.get(Calendar.SECOND); int day = c2.get(Calendar.DAY_OF_WEEK);
get方法的声明如下: public int get(int field)
其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。
在Calendar类中,周日是1,周一是2,周二是3,以此类推。
add方法:
public abstract void add(int field,int amount)
该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少时amount的值为负。
c2.add(Calendar.DATE, 100);
这里add方法是指在c2对象的Calendar.DATE,也就是日期字段上增加100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的日期
after方法:
public boolean after(Object when)
该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。例如:
Calendar c4 = Calendar.getInstance();
c4.set(2009, 10 - 1, 10);
Calendar c5 = Calendar.getInstance();
c5.set(2010, 10 - 1, 10);
boolean b = c5.after(c4);
在该示例代码中对象c4代表的时间是2009年10月10号,对象c5代表的时间是2010年10月10号,则对象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。
另外一个类似的方法是before,该方法是判断当前日期对象是否位于另外一个日期对象之前。
getTime方法:
public final Date getTime()
该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。
类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:
public final void setTime(Date date)
转换的示例代码如下:
public final void setTime(Date date)
转换的示例代码如下:
Date d = new Date();
Calendar c6 = Calendar.getInstance();
//Calendar类型的对象转换为Date对象
Date d1 = c6.getTime();
//Date类型的对象转换为Calendar对象
Calendar c7 = Calendar.getInstance();
c7.setTime(d);
Calendar对象和相对时间之间的互转:
Calendar c8 = Calendar.getInstance();
long t = 1252785271098L;
//将Calendar对象转换为相对时间
long t1 = c8.getTimeInMillis();
//将相对时间转换为Calendar对象
Calendar c9 = Calendar.getInstance();
c9.setTimeInMillis(t1);
在转换时,使用Calendar类中的getTimeInMillis方法可以将转换为相对时间。在将相对时间转换为Calendar对象时,首先要创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis方法设置时间即可。