java学习笔记41:Date时间类及jdk源码分析、DateFormat类和SimpleDateFormat类
一、Date时间类
注:把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)
用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。
如果想获得现在时刻的“时刻数值”,可以使用:
long now = System.currentTimeMillis();
这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。我们工作学习涉及的时间相关类有如下这些:
代码示例:测试Date类的常见用法
import java.util.Date;
/*测试Date类的常见用法*/
public class Test {
public static void main(String[] args) {
//没有传值意味着当前电脑的时刻
Date d = new Date();
System.out.println(d);
//两秒的毫秒数
Date d2 = new Date(2000);
System.out.println(d2);
//获取毫秒数
System.out.println(d2.getTime());
//比较毫秒数
System.out.println(d2.after(d));
//以后遇到日期处理,使用Canlendar日期类
Date d3 = new Date(2020-1900,3,10); //被去掉了
System.out.println(d3);
}
}
运行结果:
示例:Date类的使用
public class Test {
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.toString());
long i = date1.getTime();
Date date2 = new Date(i - 1000);
Date date3 = new Date(i + 1000);
System.out.println(date1.after(date2)); //大于
System.out.println(date1.before(date2)); //小于
System.out.println(date1.equals(date2));
System.out.println(date1.after(date3));
System.out.println(date1.before(date3));
System.out.println(date1.equals(date3));
System.out.println(new Date(1000L * 60 * 60 * 24 * 365 * 39L).toString());
}
}
运行结果:
查看API文档大家可以看到其实Date类中的很多方法都已经过时了。JDK1.1之前的Date包含了:日期操作、字符串转化成时间对象等操作。JDK1.1之后,日期操作一般使用Calendar类,而字符串的转化使用DateFormat类。
二、DateFormat类和SimpleDateFormat类
DateFormat类的作用
把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。
DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。
代码示例:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* 测试时间对象和字符串之间的相互转换
* DateFomat抽象类和SimpleDateFormat实现类的使用
*/
public class Test {
public static void main(String[] args) throws ParseException {
//把时间对象按照“格式字符串指定的格式”转换成相应的字符串
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //或yyyy年MM月dd日 hh时mm分ss秒
String str = df.format(new Date(40000000));
System.out.println(str);
//把字符串按照“格式字符串指定的格式”转换成时间对象
DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
//会报错,要求加try块或抛出,先写个简单的抛出 throws ParseException
Date date = df2.parse("1983年5月10日 10时45分59秒"); //格式必须匹配
System.out.println(date);
//测试其他的格式字符
DateFormat df3 = new SimpleDateFormat("D"); //查下表:D--今年的多少天
String str3 = df3.format(new Date());
System.out.println(str3);
}
}
运行结果:
示例:DateFormat类和SimpleDateFormat类的使用
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat {
public static void main(String[] args) throws ParseException {
// new出SimpleDateFormat对象
SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd");
// 将时间对象转换成字符串
String daytime = s1.format(new Date());
System.out.println(daytime);
System.out.println(s2.format(new Date()));
System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
// 将符合指定格式的字符串转成成时间对象.字符串格式需要和指定格式一致。
String time = "2007-10-7";
Date date = s2.parse(time);
System.out.println("date1: " + date);
time = "2007-10-7 20:15:30";
date = s1.parse(time);
System.out.println("date2: " + date);
}
}
运行结果:
代码中的格式化字符的具体含义见下表
时间格式字符也可以为我们提供其他的便利。比如:获得当前时间是今年的第几天。代码如下:
示例:时间格式字符的使用
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat2 {
public static void main(String[] args) {
SimpleDateFormat s1 = new SimpleDateFormat("D");
String daytime = s1.format(new Date());
System.out.println(daytime);
}
}
运行结果: