日期格式类型
1、认识Date类型
package mJava中对日期date的处理;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) throws Exception {
//Date类是在java.util包下的类,系统只自动导入java.lang包,所以java.util.Date要自己导包
Date date = new Date();
//date是Date类型对象的引用,将该参数放进方法println中,println内部又将date放入静态方法String.valueOf
//中,valueOf内部又用Date类型的引用date调用toString方法,该toString方法是Date类中重写了Object类中的
//所以输出的不是内存地址,而是日期字符串
System.out.println(date);//Sun Oct 18 14:33:47 CST 2020
//默认的日期输出方式不符合自己的要求,那可以格式化它吗?
//即将日期类型Date,按照指定的类型转换:Date-->转换成具有一定格式的字符串-->String
//可以利用SimpleDateFormat类进行格式化,该类是java.text包下的。专门负责日期的格式化
/*
* yyyy 年(年是4位的)
* MM 月(月是2位的)
* dd 日
* HH 时
* mm 分
* ss 秒
* SSS 毫秒(毫秒是3位的,最高999,1000毫秒为1秒)
* 需注意的是:在日期格式中,除了y M d H m s S这些字符不能随便写,剩下的符号格式自己组织
* 只填一个字母,格式化输出的是年月日时分毫秒的个位,多添加一个就到十位,依次类推,添加过多只会在
* 个时间单位前添0,但是月份添到MMM时输出的是中文月份表示,如十月这样
*/
//下面的语句就是定义一个想要的格式模型,将日期对象材料放进去,然后输出,完成日期-->转换-->String
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");//最合适的
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd ");//
SimpleDateFormat sdf3= new SimpleDateFormat("yy/MM/dd HH:mm:ss");//
String dateStr1 = sdf1.format(date);
String dateStr2 = sdf2.format(date);
String dateStr3 = sdf3.format(date);
System.out.println(dateStr1);//2020-10-18 14:57:48:614
System.out.println(dateStr2);//2020-10-18
System.out.println(dateStr3);//20/10/18 14:57:48
//现有一个日期字符串String,怎么转成Date型
//String-->Date
String time = "2028-10-01 12:15:56 666";
//还是通过SimpleDateFormat方法,但是是String-->转换-->Date,所以这需要根据字符串格式
//创建与提供的日期字符串格式的模板,之后调用转换方法才能将字符串转成Date
//SimpleDateFormat sdf1 = new SimpleDateFormat("格式要和提供的日期字符串格式相同,不能随便填了");
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date dateTime = sdf4.parse(time);//此时有ParseException异常未处理,解析异常,就是创建的模板和字符串格式不一致
//可以用try/catch捕获,也可以在类名后抛出该异常,使代码运行
System.out.println(dateTime);//Sun Oct 01 12:15:56 CST 2028
}
}
2、System类中的currentTimeMillis()方法
package mJava中对日期date的处理;
/*
* 获取自1970年1月1日到当前系统时间的总毫秒数
* 1秒=1000毫秒
*
* System类的相关属性和方法:
* System.out out是System类的静态变量
* System.out.println() System类中的静态变量out的返回类是PrintStream,所以println()是PrintStream类中的方法
* System.gc() 建议启动垃圾回收器
* System.currentTimeMillis() 获取自1970年1月1日到当前系统时间的总毫秒数
* System.exit(0) 退出JVM
*/
public class DateTest02 {
public static void main(String[] args) {
//获取自1970年1月1日到当前系统时间的总毫秒数
long nowTimeMillis = System.currentTimeMillis();
System.out.println(nowTimeMillis);//1603007789976
//统计print方法执行到结束耗费了多少毫秒
//执行前统计一下
long bigin = System.currentTimeMillis();
print();
//执行后统计一下
long end = System.currentTimeMillis();
//后前相减
System.out.println("执行print方法耗费"+(end-bigin)+"毫秒");//每次输出都不一样的,不打印耗时0毫秒
}
public static void print() {
for (int i = 0; i < 1000; i++) {
System.out.println("i = "+i);
}
}
}
3、通过毫秒数构建Date对象
package n通过毫秒构建Date对象;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* Date类中的构造方法中传参数--long类型的毫秒数
*/
public class DateTest {
public static void main(String[] args) {
//如下构建的对象时间是什么?
Date time = new Date(1);//1970-01-01 00:00:00 001
//建个合适的输出(或者说格式化)时间的模板
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//因为本电脑北京是东8区,所以输出的时间早8个小时
System.out.println(sdf1.format(time));//1970-01-01 08:00:00 001
//获取昨天此时的日期
Date time2 = new Date(System.currentTimeMillis()-1000*24*60*60);
System.out.println(sdf1.format(time2));//2020-10-17 16:48:59 510
}
}