一、Date类

1. 概述

Date类:表示特定的瞬间,精确到毫秒。

2.Date类的构造方法

2.1 public Date();

官方讲解:public Date():分配Date对象并初始化对象,以表示分配它的时间(精确到毫秒)

通俗的讲:public Date():分配Date对象并初始化对象,用来获取当前环境的时间,精确到毫秒。

public class Demo_01 {
    public static void main(String[] args) {

        Date date1 = new Date();
        System.out.println(date1);

    }
}

输出结果如下:

java 时间精度到六位 java date精度_System

 2.2 public Date (long date);

官方讲解:public Date (long date):分配Date对象并初始化此对象,以表示自从标准基准时间。

通俗的讲:public Date (long date):分配Date对象并初始化此对象,date变量用来存储毫秒数,用来计算从1970年1月1日00:00:00 开始经过date毫秒后是什么时间。

public class Demo_01 {
    public static void main(String[] args) {

        Date date2 = new Date(215464654);
        System.out.println(date2);

    }
}

输出结果如下:

java 时间精度到六位 java date精度_System_02

 3. Date类的常用方法

gettime():用来获取自 1970 年 1 月 1 日 00:00:00 GMT 开始到当前时间的毫秒数(时间戳)

public class Demo_01 {
    public static void main(String[] args) {
        Date date1 = new Date();
        long time = date1.getTime();
        System.out.println(time);
    }
}

输出结果如下:

java 时间精度到六位 java date精度_System_03

二、SimpleDateFormat类

1.概述

官方讲解:SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

通俗的说:SimpleDateForma类就是用来实现字符串和日期之间的相互转换。

2.日期和时间模式

字母

日期或时间元素

表示

示例

G

Era 标志符

Text

AD

y


Year

1996; 96

M

年中的月份

Month

July; Jul; 07

w

年中的周数

Number

27

W

月份中的周数

Number

2

D

年中的天数

Number

189

d

月份中的天数

Number

10

F

月份中的星期

Number

2

E

星期中的天数

Text

Tuesday; Tue

a

Am/pm 标记

Text

PM

H

一天中的小时数(0-23)

Number

0

k

一天中的小时数(1-24)

Number

24

K

am/pm 中的小时数(0-11)

Number

0

h

am/pm 中的小时数(1-12)

Number

12

m

小时中的分钟数

Number

30

s

分钟中的秒数

Number

55

S

毫秒数

Number

978

z

时区

General time zone

Pacific Standard Time; PST; GMT-08:00

Z

时区

RFC 822 time zone

-0800

 3. SimpleDateFormat类中的常用方法

3.1 format():把日期转换成指定格式的字符串

public class Demo_02 {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = new Date();
        String format = sdf.format(date1);
        System.out.println(format);
    }
}

输出结果如下:

java 时间精度到六位 java date精度_System_04

3.2 parse():把指定格式的字符串转换成日期

补充:parse()方法不能直接使用,需要处理异常才能使用。

public class Demo_02 {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = "1998-09-21 8:20:38";
        try {
            Date date2 = sdf.parse(time);
            System.out.println(date2);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

输出结果如下所示:

java 时间精度到六位 java date精度_Time_05

三、 Calendar类

1. 概述

官方讲解:Calendar 类是一个抽象类,它为特定瞬间。Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。

通俗的讲:Calendar 类是一个抽象类,可以通过Calendar 的getInstance() 方法返回一个Calendar对象。

2. 常用字段摘要

DATE

表示一个月中的某一天

DAY_OF_MONTH

表示一个月中的某一天

DAY_OF_WEEK

表示一个星期的某一天

DAY_OF_WEEK_IN_MONTH

表示当前月中的第几个星期

DAY_OF_YEAR

表示当前年的天数

AM

表示上午(午夜到中午之间的时间)

AM_PM

指定上午或下午(指示HOUR是在中午之前还是中午之后)

PM

表示下午(中午到午夜之间的时间)

HOUR

表示上午或下午的时间(结尾需要使用AM_PM来指示上午或下午的时间)

HOUR_OF_DAY

表示一天中的小时

MILLISECOND

表示一秒钟的毫秒

MINUTE

表示一小时中的分钟

MONTH

表示月份

SECOND

表示秒数

WEEK_OF_MONTH

表示当前月中的星期数

WEEK_OF_YEAR

表示当前年中的星期数

YEAR

表示年

3. Calendar类的常用方法

3.1 getTime();

getTime():用来获取当前系统的时间

public class Demo_03 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        Date date1 = calendar.getTime();
        System.out.println("当前时间为:"+date1);
    }
}

输出结果如下:

java 时间精度到六位 java date精度_java 时间精度到六位_06

 3.2 get();

get()方法用来获取指定字段的值。

public class Demo_03 {
    public static void main(String[] args) {
        //get方法可以根据 指定的日历字段 获取时间对应的值
        //calendar.get(Calendar.YEAR) 获取 年
        int year = calendar.get(Calendar.YEAR);
        System.out.println("年份:"+year);

        //calendar.get(Calendar.MONTH) 获取 月份
        int month = calendar.get(Calendar.MONTH);//从0开始 11结尾 所以月份得加1
        System.out.println("月份:"+(month+1));

        //calendar.get(Calendar.DAY_OF_MONTH); 获取在月份中的天数(日)
        int date = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("一个月中的第:"+date+"天");

        //calendar.get(Calendar.DAY_OF_YEAR); 获取在本年中的第几天
        int day_of_Year = calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println("一年中的第:"+day_of_Year+"天");
    }
}

 输出结果如下:

java 时间精度到六位 java date精度_Time_07

3.3 set();

set()方法用来给某个字段赋值。

public class Demo_03 {
    public static void main(String[] args) {
        //可以获取 指定时间 月份0-11 表示 1-12月
        // second:61 可以自动根据时间转换进一位
        calendar.set(2000,9,28,15,46,61);
        Date date2 = calendar.getTime();
        System.out.println(date2);
    }
}

输出结果如下:

java 时间精度到六位 java date精度_java_08

3.4 getTimeInMillis();


getTimeInMillis()方法返回从历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)至现在所经过的毫秒数。


public class Demo_03 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        long timeInMillis = calendar.getTimeInMillis();
        System.out.println("当前时间的毫秒值:"+timeInMillis);
    }
}

输出结果如下:

java 时间精度到六位 java date精度_Time_09

3.5  getTimeZone();

getTimeZone()方法用来获取时区。

public class Demo_03 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        TimeZone timeZone = calendar.getTimeZone();
        System.out.println("所在时区:"+timeZone);
    }
}

 输出结果如下:

java 时间精度到六位 java date精度_开发语言_10

四、 扩展练题

题目:用户按照格式输入出生年月日 时分秒   计算他几岁了?

实现代码如下:

package com.hp.Test09;

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

/**
 * 拓展作业: 用户按照格式输入出生年月日 时分秒   计算他几岁了?
 */
public class Demo_04 {
    public static void main(String[] args) {
        //提示用户需要输入的出生日期格式
        System.out.println("请根据----年--月--日--时--分--秒 的格式来输入你的出生日期");
        //实现键盘录入
        Scanner scanner = new Scanner(System.in);
        String dateTime=scanner.next();
        //使用SimpleDateFormat类把用户输入的出生日期字符串转换为日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        try {
            //把键盘录入的出生日期字符串转换为日期对象
            Date born = sdf.parse(dateTime);
            //获取当前时间
            Date current_Time = new Date();
            //把录入日前转换为毫秒数
            long new_born = born.getTime();
            //把当前日期转换为毫秒数
            long new_Current_Time = current_Time.getTime();
            //求出年龄毫秒数
            long years = new_Current_Time - new_born;
            int new_years = (int) (years / 1000 / 60 / 60 / 24 / 365);
            System.out.println("你今年"+new_years+"岁了,已经是成年人了。");


        } catch (ParseException e) {
            throw new RuntimeException(e);
        }


    }
}

输出结果如下:

java 时间精度到六位 java date精度_Time_11