2.时间处理相关类

Java常用类——时间处理相关类_object

  • 时间处理的相关类主要在Java.util包中

  • 其中Date类为核心 ,Calendar为日期计算首选

  • Date 时间类

  • 计算机中的时间是如何计算的?

    日历时间:
    有些书上又叫系统时间。该值是自1970年1月1日00:00:00以来国际标准时间(U T C)所经过的秒数累计值(早期的手册称U T C为格林尼治标准时间)。在PC/AT微机系统中,支撑该时间的硬件是实时钟RT(Real Time)电路。操作系统在系统初始化的过程中,会从该电路中读取该时间,并保存在内核变量中。

  • 我们计算机的时间是从1970年1月1日00:00:00开始到现在的毫秒值。

    • 通过毫秒转化为各种不同的时间单位
package com.timezone.demo;

import java.util.Date;
public class Demo1 {
    public static void main(String[] args) {
        Date date = new Date();
        long t = System.currentTimeMillis(); //获取时间毫秒值
        System.out.println(t);
        System.out.println(date);   // 获取完整的系统时间
        System.out.println(date.getTime());  //获取时间毫秒值


        System.out.println("==================================");
        Date date1 = new Date();
        System.out.println(date.before(date1));  // 比较是否在某个时间之前
        System.out.println(date.after(date1));  // 比较是否在某个时间之前
        System.out.println("==================================");

    }
}
  • DateFormatSimpleDateFormat

  • DateFormat是一个时间格式化的抽象类,SimpleDateFormat 是其的一个实现类

  • 完成字符串的时间格式之间的转换。

package com.timezone.demo;

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

public class Demo2 {
    public static void main(String[] args) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日");

        Date date = new Date();
        date.setTime(123465646L);
        System.out.println(df.format(date));  // 按照格式将时间对象转化为字符串

        df.applyPattern("yyyy-MM-dd hh:mm:ss");  // 重新设置时间格式
        System.out.println(df.format(date));

        System.out.println("===================================");
//        字符串转化为时间对象
        Date date$1 = null;
        String dateStr = "2020-07-29 16:36:22";
        try {
            date$1 = df.parse(dateStr);  //注意:字符串的格式一定要跟我们设置的时间格式一致,否则会报解析异常
        } catch (ParseException e) {
            e.printStackTrace();
        } finally {
            System.out.println(date$1);
        }


    }

}
  • **Calendar ** 是一个日历相关的抽象类,GregorianCalendar 是其一个实现类(公历)
  • 国外的月份没有1~12月的概念,设计时,1月是0,2月是1…12月是11
  • 国外的星期日是1,星期一是2…,星期六是7
package com.timezone.demo;


import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Demo3 {
    public static void main(String[] args) {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        gregorianCalendar.set(2020,6,29,17,01,22); // 设置时间

        Date time = gregorianCalendar.getTime();// 获取时间
        System.out.println(time);
        System.out.println("============================");
        gregorianCalendar.setTime(new Date());
        Date time$1 = gregorianCalendar.getTime();
        System.out.println(time$1);
        System.out.println("============================");
        gregorianCalendar.add(Calendar.YEAR,30);// 对时间进行计算
        System.out.println(gregorianCalendar.getTime());
        gregorianCalendar.add(Calendar.YEAR,-50);
        System.out.println(gregorianCalendar.getTime());
    }
}

  • 日期可视化小案例
package com.timezone.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class Test {
    static String dateStr;
    static Date date;

    public static void main(String[] args) {
        SetDate();//用户输入日期
        ProcessingDate processingDate = new ProcessingDate().invoke();
        int flag = processingDate.getFlag(); // 获取换行标记
        int MAX_DATE = processingDate.getMax_date();//获取月份最大日期
        int date$ = processingDate.getDate$();// 获取实际日期
        PrintDate(flag, MAX_DATE, date$);//打印日历
    }

    public static void SetDate() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("请输入一个日期(例 2020-07-29)");
        Scanner scanner = new Scanner(System.in);

        // 捕获字符串
        if (scanner.hasNext()) {
            dateStr = scanner.next();
        } else {
            System.out.println("格式错误");
            System.exit(0);
        }

        try {
            date = dateFormat.parse(dateStr);  // 字符串转化为时间对象
        } catch (ParseException e) {
            System.out.println("格式错误");
            System.exit(0);
        }
    }

    public static void PrintDate(int flag, int MAX_DATE, int date$) {
        System.out.println("日\t一\t二\t三\t四\t五\t六");  // 打印表头

        for (int i = 0; i < flag; i++) {
//            打印前边空白
            System.out.print("\t");
        }

        for (int i = 1; i <= MAX_DATE; i++) {
//            打印日期
            if (i == date$) {
                System.out.print(i + "*\t");
            } else {
                System.out.print(i + "\t");
            }
            flag++;
            if (flag % 7 == 0) {
                System.out.println();
            }
        }
    }

    private static class ProcessingDate {
        private int flag;// 标记处理换行
        private int max_date;// 这个月的最大日期
        private int date$;//输入的实际日期

        public int getFlag() {
            return flag;
        }

        public int getMax_date() {
            return max_date;
        }

        public int getDate$() {
            return date$;
        }

        public ProcessingDate invoke() {
            GregorianCalendar gregorianCalendar = new GregorianCalendar();  // 实例公历对象
            gregorianCalendar.setTime(date); //设置日历时间
            gregorianCalendar.set(Calendar.DATE, 1);  // 设置日期为1号
            flag = gregorianCalendar.get(Calendar.DAY_OF_WEEK) - 1;
            gregorianCalendar.setTime(date); //重置时间
            max_date = gregorianCalendar.getActualMaximum(Calendar.DATE);
            date$ = gregorianCalendar.get(Calendar.DATE);
            return this;
        }
    }
}

Java常用类——时间处理相关类_java_02