Date
java.util.date对象表示一个精确到毫秒的瞬间,但是在JDK1.0的时候就已经存在了,所以其中有很多的方法都已经过时了,如果贸然使用可能会出现性能/安全方面的问题,下面介绍几个剩下的为数不多的方法
- 构造器
Date()
:在底层调用System.currentTimeMillis()Date(long date)
:根据指定的long整数(从1970-1-1 00:00:00以来经过的毫秒数)来生成Date对象.
- 方法
boolean before(Date time)
:返回传入时间是否在当前时间的前面boolean after(Date time)
:返回传入时间是否在当前时间的后面long getTime()
:返回从1970-1-1:00:00:00:0000到Date对象所经过的毫秒数void setTime(long time)
:设置时间,time和上面的含义相同
public class TestTime {
public static void main(String[] args) {
Date before = new Date();
Date after = new Date(System.currentTimeMillis() + 1);
System.out.println("Before : " + before.getTime());
System.out.println("after : " + after.getTime());
System.out.println(before.before(after));
System.out.println(before.after(after));
before.setTime(System.currentTimeMillis()+5);
System.out.println("before : " + before.getTime());
}
}
Calendar
由于Date类存在缺陷,所以又设计了Calendar类来处理日期和时间Calendar是一个抽象类,是所有日历类的模板,所以加入我们要设计自己的日历(比如阴历)就可以继承Calendar类来实现。
- Calendar类还可以和Date类相互转换:
public class CalendarTest {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
System.out.println(calendar);
System.out.println(time.getTime());
System.out.println(calendar.get(Calendar.DATE));
}
}
日期格式化
java.text.SimpleDateFormat可以灵活的格式化Date,也可以用于解析各种日期格式字符串,创建SimpleDateFormat对象的时候需要传入一个pattern字符串,这个字符串不是正则表达式的字符串,而是日期格式的模板字符串
SimpleDateFormat中最常用的方法
方法 | 描述 |
---|---|
String formate(Date date) | 将时间解析为指定字符串格式 |
Date parse(String timeString) | 将指定格式的时间字符串转换为时间 |
public class FormatTest {
public static void main(String[] args) throws ParseException {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(sdf.format(date));
String timeString = "2017-08-30 10:12:12";
Date newDate = sdf.parse(timeString);
System.out.println(newDate);
}
}
时间存储
将时间存入数据库的时候会涉及到不同时区的问题,因此在设计数据库表的时候可以将时间设置为BIGINT(64位),来存储从1970年1月1日0点的时间到现在的毫秒数
- 优点:
- 不同时区读出来的时间转换为日期格式的时候都是当前时区的日期
- 缺点:
- 数据库中查看时间的时候,只能看到一串数字