1、java.util.Date
代码示例:
package test3_date_class;
//java.util下的Date
//import java.sql.SQLOutput;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);
System.out.println(d.toString());
//划线原因:过期方法、过时方法、废弃方法(不建议用)
//GMT时间
System.out.println(d.toGMTString());
//2022-9-28 17:21:19
System.out.println(d.toLocaleString());
System.out.println(d.getYear()); // 122 +1900 = 2022年
System.out.println(d.getMonth()); // 8 +1 = 9月
//返回自1970年1月1日以来,由 Date对象表示的00:00:00 GMT的毫秒数
System.out.println(d.getTime());
//System类下的方法,不是Date下的(但是功能一样的)
System.out.println(System.currentTimeMillis());
/*
(1)疑问:以后获取时间差用:getTime()还是currentTimeMillis()?
答案:currentTimeMillis(),因为这个方法是静态的,可以类名.方法名直接调用
(2)public static native long currentTimeMillis();
本地方法
为什么没有方法体?因为这个方法的具体实现不是通过java写的。
(3)这个方法的作用:
一般会去衡量一些算法所用的时间
*/
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime); //毫秒
}
}
2、java.sql.Date
代码示例:
package test3_date_class;
//java.sql下的Date
//import javax.xml.crypto.Data;
import java.sql.Date;
public class Test2 {
public static void main(String[] args) {
//导包还是出现错误,是因为没有空构造器
//参数为long类型的数(后面加个L)
Date d = new Date(1664358106118L);
System.out.println(d);
/*
(1)java.sql.Date和java.util.Date的区别:
java.util.Date:年月日 时分秒
java.sql.Date:年月日
(2)java.sql.Date和java.util.Date的联系:
java.sql.Date(子类) extends java.util.Date (父类)
*/
//java.sql.Date和java.util.Date相互转换:
//【1】util--->sql:
//java.util.Date date = new java.util.Date();//创建util.Date的对象
//上一行代码会提示类型转换异常
//改为: util.Date 等于 (具体的) sql.Date(对象) 才行
java.util.Date date = new Date(1664358106118L);
//new Date(1664358106118L)直接从13行拿过来的
//即一个sql.Date对象
//方式1:向下转型
Date date1 = (Date)date;
//上一行代码会提示类型转换异常 (将24行改为27行即可)
//因为:
/*
父类:Animal 子类:Dog
// Animal an = new Animal(); —— 不行,Animal an得是一条具体的狗才行
Animal an = new Dog();
Dog d = (Dog)an;
*/
//方式2:利用构造器
Date date2 = new Date(date.getTime());//date.getTime()相当于664358106118L
//【2】sql---> util
//f父类引用指向子类对象,直接转
java.util.Date date3 = d;
//【3】String ---> sql.Date(利用valueOf()这一常用的方法)
Date date4 = Date.valueOf("2022-6-6");
}
}
3、SimpleDateFormat
【1】String---》java.util.Date 类型转换:
(分步进行)分解:
(1)String--->java.sql.Date
(2)java.sql.Date--->java.util.Date
代码示例:
package test3_date_class;
import javax.tools.JavaCompiler;
/*
String --->java.util.Date 类型转换:
分解:
(1)String--->java.sql.Date
(2)java.sql.Date--->java.util.Date
*/
public class Test3 {
public static void main(String[] args) {
// String ---> java.sql.Date
java.sql.Date date = java.sql.Date.valueOf("2020-1-1");
// java.sql.Date ---> java.util.Date
java.util.Date date2 = date;
System.out.println(date.toString());
//上面的代码有局限性,字符串的格式只能是年-月-日拼接的形式,
//换成其它(比如:年/月/日)类型,就会出现异常
//故,引入新的类:SimpleDateFormat ,见Test4
}
}
上面的代码有局限性,字符串的格式只能是年-月-日拼接的形式,换成其它类型,就会出现异常:
【2】引入新的类:SimpleDateFormat —— 自定义自己的时间格式
日期格式:
代码示例:
package test3_date_class;
import java.sql.SQLOutput;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test4 {
public static void main(String[] args) {
//日期转换
//报错了
//原因:DateFormat类是抽象类,而抽象类是不能创建对象的
//DateFormat df = new DateFormat();
//所以,改用:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//点进去,发现 SimpleDateFormat 继承自 DateFormat
//所以,这里是:父类(抽象类)引用指向子类对象,是可以的
//上面,格式化的标准已经定义好了,如:yyyy-MM-dd HH:mm:ss
//所以,接下来就可以实现互相转换:
//通过上面定义的df即可:
//1)String ---> Date
//用到了parse()方法
try {
Date D = df.parse("2020-8-5 11:25:53");//提示有异常,自己捕获即可
System.out.println(D); //注意,这里是util类型的Date,所以输出的格式是这样的
} catch (ParseException e) {
e.printStackTrace();
}
//2)Date ---> String
//用到了format()方法
//df.format(new Date()); //先创建一个Date对象 ,
// 再将该对象以 "yyyy-MM-dd HH:mm:ss" 的形式赋给String类型的对象
String format = df.format(new Date());
System.out.println(format);
//而new Date()是获取当前的时间(只是格式是默认的)
System.out.println(new Date());
System.out.println("Date ---> String ,以前的转换方式");
//Date类型往String类型的转换,以前通过如下方式进行了转换:
//(注:但都不是按照自己自定义的方式进行输出的,这是和format()方法的不同)
Date date = new Date();
System.out.println(date);
//同:
System.out.println(date.toString());
//下面两种已经被弃用了(不建议用了)
System.out.println(date.toGMTString());
System.out.println(date.toLocaleString());
}
}