/**
* 测试Date类
* DateFormat抽象类 SimpleDateFormat类 用于日期和字符串之间转换
*/
public class TestDate {
public static void mAIn(String[] args) {
long nowTime = System.currentTimeMillis();
//返回当前时间 单位毫秒 从1970-01-01 0:00开始计算的总毫秒值 在1970以后为正数 以前为负数
//JAVA.lang.System类静态方法
long max = Long.MAX_VALUE;
//包装类Long中存放常量 MAX MIN
long range = max/(1000L*3600*24*365);
//1000毫秒 加L转为long类型防止int溢出
System.out.println(range+"的结果为292471208");
//范围为正负2.9亿年
Date d1 = new Date();
System.out.println(d1+"的结果为Mon Jul 11 20:52:25 CST 2022");
//无参new Date()返回当前时间的Date对象 d1.fastTime存储当前时间System.currentTimeMillis()的long值
System.out.println(d1.getTime()+"的结果为1657544258209");
//.getTime()返回fastTime
System.out.println(d1.getTime()/(1000L*3600*24*365)+"的结果为52 即从1970至今(2022)52年");
Date d2 = new Date(1000L*3600*24*365*52);
//传参long 毫秒
System.out.println(d2+"的结果为Sun Dec 19 08:00:00 CST 2021 有闰年所以有误差");
SimpleDateFormat df = new SimpleDateFormat();
//format格式化 ()中的参数为字符串 通过输入的字符串设定日期的匹配格式和输出格式 无参默认格式为"yy-MM-dd 上/下午hh:mm" DateFormat为抽象类 可以用做引用类型 构造器需要用SimpleDateFormat()
System.out.println(df.format(d1)+"的结果为22-7-11 下午9:38");
//yy22 MM7 dd11 下午 hh9 :mm38 .format()将Date对象转换为字符串String 按照df设定好的格式
try {
System.out.println(df.parse("90-12-20 上午11:30"));
//parse解析操作要求处理ParseException try/catch和throws二选一
//结果为Thu Dec 20 11:30:00 CST 1990
//.parse()将符合设定格式的字符串转换为Date对象 print的结果为Date对象.toString 所以格式和设定的格式不同
//这里90转换为1990
} catch (ParseException e) {
throw new RuntimeException(e);
}
DateFormat df2 = new SimpleDateFormat("年份:yyyy 月份大写的:MM 日:dd 小时0-23:HH 分钟:mm 秒:ss 年里的第几周:w 年里的第几天:D 星期几大写的:EEE三个字符就显示单词的前三位");
try {
Date d4 = df2.parse("年份:2022 月份大写的:07 日:11 小时0-23:22 分钟:04 秒:25 年里的第几周:29 年里的第几天:192 星期几大写的:星期一三个字符就显示单词的前三位"/*中文环境下显示为汉字星期几*/);
System.out.println(d4+"的结果为Mon Jul 11 22:04:25 CST 2022");
//格式中的EEE在中文环境下变成了 星期几 格式中的字母是固定含义的 比如年份只能用y表示 不同在于 yy代表末尾两位数 yyyy代表四位年份 但第几周的w一个就对应了29 第几天的D一个就对应了192
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}