Java--Date、Calendar、SimpleDateFormat、System类

一、Date

  • Date表示特定的瞬间,精确到毫秒
  • Date类中的大部分方法都已经被Calendar类中的方法所取代
  • 时间单位
    • 1秒 = 1000毫秒
    • 1毫秒 = 1000微妙
    • 1微妙 = 1000纳秒
package com.monv.str;

import java.util.Date;

public class TestDate {
    public static void main(String[] args) {
        //1.创建Date对象
        //今天 无参构造表示默认的日期
        Date date1 =new Date();//用util包中的Date
        System.out.println(date1.toString());//结果不是我们常用的格式
        System.out.println(date1.toLocaleString());//这个方法已经过时了 
        //昨天 带参构造Date(long date);表示1970.1.1以来的毫秒数
        Date date2 = new Date(date1.getTime()-(60*60*24*1000));
        System.out.println(date2.toLocaleString());
        //2.方法 after before
        boolean b1 = date1.after(date2);
        System.out.println(b1);
        boolean b2 = date1.before(date2);
        System.out.println(b2);
        
        //比较compareTo(); 比较毫秒值
        int d1 = date1.compareTo(date2);
        System.out.println(d1);
        
        //比较是否相等 equals()
        boolean b3 = date1.equals(date2);
        System.out.println(b3);
        
    }
}

--------------------------------
Thu Sep 10 14:06:22 CST 2020
2020-9-10 14:06:22
2020-9-9 14:06:22
true
false
1
false

二、Calender

  • Calender提供了获取或设置各种日历字段的方法
  • protected Calendar()构造方法为protected修饰,无法直接创建该对象
  • 其他方法(如下图)

  

package com.monv.str;

import java.util.Calendar;

public class TestCalender {
    public static void main(String[] args) {
        //创建Calender对象
        Calendar calender = Calendar.getInstance();//因为是被保护的 不能创建对象 所以用Calendar的getInstance()静态方法创建
        System.out.println(calender.getTime().toLocaleString());//2020-9-10 17:54:01
        System.out.println(calender.getTimeInMillis());//1599731641181 返回毫秒数(1970年到现在) 
        //2.获取时间信息
        //获取年
        int year = calender.get(calender.YEAR);
        //月 返回值是从0-11
        int month = calender.get(calender.MONTH);
        //
        int day = calender.get(calender.DAY_OF_MONTH);//Date 或 DAY_OF_MONTH都可以
        //小时
        int hour = calender.get(calender.HOUR_OF_DAY);//HOUR 12小时 HOUR_OF_DAY 24小时
        //分钟
        int minute = calender.get(calender.MINUTE);
        //
        int second = calender.get(calender.SECOND);
        //打印
        System.out.println(year+"年"+(month+1)+"月"+" "+day+"日"+hour+":"+minute+":"+second);//2020年9月 10日17:55:11
        //3.修改时间
        Calendar calender2 = calender.getInstance();
        calender2.set(calender.DAY_OF_MONTH,9);//指定到某一天 9指定到9号
        System.out.println(calender2.getTime().toLocaleString());//2020-9-9 17:55:11
        //4.add修改时间
        //增一个小时 (正:增加小时,负:减少小时)
        calender2.add(calender2.HOUR, 1);
        System.out.println(calender2.getTime().toLocaleString());//2020-9-9 18:55:11(增加1个小时)
        //5.补充方法 获取月的最大日期和最小日期
        int max = calender2.getActualMaximum(calender.DAY_OF_MONTH);
        int min = calender2.getActualMinimum(calender.DAY_OF_MONTH);
        System.out.println("最大日期"+max);//最大日期30
        System.out.println("最小日期"+min);//最小日期1
    }
}

 三、SimpleDateFormat

  • SimpleDateFormat是以与语言环境有关的方式来格式化和解析日期的类
  • 进行格式化(日期-->文本)、解析(文本-->日期)
  • 常用的时间模式字母

  

 

package com.monv.chapter;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo3 {
    public static void main(String[] args) throws Exception{
        //1.创建SimpleDateFormat对象 y:年   M:月    d:日   H:时   m:分   s:秒
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//格式化的形式
        //2.创建Date
        Date d1 = new Date();
        //3.格式化日期 把d1转换为字符串
        String str1 = sdf1.format(d1);
        System.out.println(str1);
        //4.解析 把字符串转换为日期
        String str2 = "1990/9/20 10:10:20";//注意:字符串的格式要与 sdf1的格式一致 否则会报错
        Date d2 = sdf1.parse(str2);
        System.out.println(d2.toLocaleString());            
    }    
}

 

 四、System类

  •  System系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的。在用的时候不需要创建对象,直接用system.就可以了

  

 

package com.monv.chapter;

public class Demo4 {
    public static void main(String[] args) {
        //1.arraycopy() 复制数组
        //参数说明:src:源数据,srcPos:从源数组哪个位置开始
        //dest:目标数组,destPos:从目标数组的哪个位置开始放  length:复制的长度
        int[] arr1 = {10,23,25,69,48,74};
        int[] arr2 = new int[6];
        System.arraycopy(arr1, 0, arr2, 0,arr1.length);
        for (int i = 0;i<arr2.length;i++) {
            System.out.println(arr2[i]);
        }
        
        //2.currentTimeMillis();获取1970/1/1距今的毫秒值 可以用来计时
        long start = System.currentTimeMillis();//记下开始时间
        //来写一个循环
        for (int i = 0 ;i<99999;i++) {
          for (int j = 0;j<99999;j++) {
              int k = i+j;
          }
        }
        long end = System.currentTimeMillis();//记下结束时间
        System.out.println("用时:"+(end-start));//结束时间-开始时间 = 用时
        
        //3.gc();通知垃圾回收器回收垃圾
        Student s1 = new Student("aaa",20);//被用着 没有回收
        Student s2 = new Student("bbb", 21);//被用着 没有回收
        new Student("ccc", 22);//回收了
        new Student("ddd", 23);//回收了
        System.gc();
        
        //4.exit();退出jvm 0 正常退出,非0,异常退出
        System.exit(0);
        System.out.println("程序退出了。。。");//上一句执行了退出,所以之后的代码都不会执行
    }
}

 

posted @ 2020-09-10 21:12  改Bug的小魔女  阅读(163)  评论(0编辑  收藏  举报