Day13-2.Date类型 、SimpleDateFormat类型 、Calendar类型 、NumberFormat类型

本文详细介绍了Java中处理日期时间的Date类,包括如何创建对象和使用常用方法。同时,讲解了SimpleDateFormat的用法,用于自定义日期格式化和解析。还探讨了Calendar类,展示了如何操作时间字段,并通过实例展示了如何判断闰年和平年。此外,还提及了NumberFormat类在数字格式化中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Date类型

  1. 概述:
    Date是表示时间的类型,此类可以表示特定的瞬间,精确到毫秒
    是Java中提供的表示时间日期数据的类型

1.1 定义对象的方法

  1. public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
  2. public Date(long date):分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为"历元(epoch)",即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

1.2 常用方法

方法名解释
public long getTime()返回自1970 年1月1日 00:00:00 GMT 以来此 Date 对象表示的 毫秒数
public void setTime(long time)设置此Date对象,以表示 1970 年1月1日 00:00:00 GMT以后 time 毫秒的时间点

2 SimpleDateFormat

  1. 概述:使用一个与语言环境有关的方式来格式化和解析日期的具体类
  2. 特点:
    (1)java.text包,需要导包使用
    (2)可以按照自定义的方式格式化日期
    (3)可以按照指定格式解析日期

2.1 构造方法

方法名解释
public SimpleDateFormat()用默认的模式和默认语言环境的日期格式创建对象
public SimpleDateFormat(String pattern)指定解析日期的格式创建对象

2.2 常用方法

方法名解释
public final String format(Date date)将一个 Date 格式化为日期/时间字符串
public Date parse(String source)从给定字符串解析文本,以生成一个日期

注意事项:如果指定的格式不匹配,抛出ParseException

代码

package demos5_date;

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

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

        Date d = new Date();
        System.out.println(d);
        //使用SimpleDateformat类型默认的方式,格式化时间
        SimpleDateFormat sim = new SimpleDateFormat();
        String str = sim.format(d);
        System.out.println(str);
        //使用自己定义的方式,格式化时间展示
        //如果需要制定格式:使用特定的符号
        //y:年   M:月  dd:天   H:时  m:分   s:秒钟
        //2021年8月19号  14时02分00秒
//        SimpleDateFormat sim2 = new SimpleDateFormat("yyyy年M月dd号 HH时mm分ss秒");
        SimpleDateFormat sim2 = new SimpleDateFormat("yyyy-M-dd HH:mm:ss");
        String str2 = sim2.format(d);
        System.out.println(str2);
    }
}

代码2

package demos5_date;

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

public class Demo03 {
    public static void main(String[] args) throws ParseException {

        String time = "2021年08月19号 14:11:50";
        SimpleDateFormat sim = new SimpleDateFormat("yyyy年MM月dd号 HH:mm:ss");
        //将一个字符串解析为一个Date对象
        Date date = sim.parse(time);
        System.out.println(date);
    }
}

3 案例1

在控制台上输入一个long类型的毫秒值,将录入的毫秒值换算成对应的Date时间对象,将获取的Date对象格式化成“2020年10月1日 20时20分20秒 “这种形式进行展示。

代码

package demos5_date;

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

public class Test01 {
    public static void main(String[] args) {
//        在控制台上输入一个long类型的毫秒值,将录入的毫秒值换算成对应的Date时间对象,
//        将获取的Date对象格式化成“2020年10月1日 20时20分20秒 “这种形式进行展示。
        Scanner sc = new Scanner(System.in);
        long g = sc.nextLong();

        Date d = new Date(g);
        SimpleDateFormat sim = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        String str = sim.format(d);
        System.out.println(str);

    }
}

4 案例2

键盘录入自己的生日,录入的格式可以为:0000年-00月-00日。
然后计算自己至今为止活了多少毫秒,活了多少天,活了多少年。

代码

package demos5_date;

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

public class Test02 {
    public static void main(String[] args) throws ParseException {
//        键盘录入自己的生日,录入的格式可以为:0000年-00月-00日。
//        然后计算自己至今为止活了多少毫秒,活了多少天,活了多少年。
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入自己的生日:格式为:0000年-00月-00日");
        String birthday = sc.nextLine();
        //先把字符串转为date对象  ===》 毫秒值
        SimpleDateFormat sim = new SimpleDateFormat("yyyy年-MM月-dd日");
        Date date = sim.parse(birthday);
        long time = date.getTime();//从元年-----当前录入时间的毫秒差
        Date now = new Date();//当前时刻
        long time2 = now.getTime();//当前时刻对应的毫秒
        //当前时刻---出生时刻:活的时间
        long time3 = time2-time;
        System.out.println("恭喜你活了" + time3 + "毫秒");
        System.out.println("恭喜你活了" + time3/1000/60/60/24 + "天");
        System.out.println("恭喜你活了" + time3/1000/60/60/24/365 + "年");
    }
}

5 Calendar类型

  1. 概述:用来表示和操作日历时间各个字段的类型
  2. 特点:
    (1)java.util包,需要导包
    (2)类型对象中中提供了各个时间字段,如:年、月、日、星期等
    (3)类中提供了各种方法可以操作各个时间字段
    (4)此类是一个抽象类,不能直接创建对象

5.1 常用字段

字段名Value
DAY_OF_MONTH本月第几天
DAY_OF_WEEK星期几(星期日~星期六)
DAY_OF_YEAR当前年的第几天
HOUR_OF_DAY当天小时数 14
HOUR当前小时(12小时制) 2
MINUTE当前分钟
SECOND当前秒
WEEK_OF_MONTH当月第几周
WEEK_OF_YEAR本年第几周
YEAR当前年份
MONTH当前月份(系统默认月份是从0开始)

5.2 常用方法

方法名解释
public static Calendar getInstance()使用默认时区和语言环境获得一个Calendar类子类对象
public int get(int field)获取指定字段的值
public void set(int field,int value)将给定的日历字段设置为给定
public abstract void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量
public final Date getTime()返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象

对于public void set()
如果传入两个参数,第一个参数默认为某个时间字段,第二个参数默认为要改的值
如果传入三个参数,默认为年月日
如果传入五个参数,默认为年月日,时分
如果传入六个参数,默认为年月日,时分秒
对于public abstract void add(int field,int amount)
可以传入正值,表示增加
可以传入负值,表示减少

代码

package demos5_date;

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

public class Demo04 {
    public static void main(String[] args) {
        //通过类中提供的静态方法,获取一个子类对象,使用父类引用接收
        //该类对象中维护了表示时间的各个字段
        Calendar can = Calendar.getInstance();
        System.out.println(can);

        //打印当前时间中各个字段对应的值:
        System.out.println(can.get(Calendar.YEAR));
        System.out.println(can.get(Calendar.DAY_OF_YEAR));
        System.out.println(can.get(Calendar.DAY_OF_MONTH));
        System.out.println(can.get(Calendar.DAY_OF_WEEK)-1);
        System.out.println(can.get(Calendar.HOUR));
        System.out.println(can.get(Calendar.HOUR_OF_DAY));

        //将时间字段的值进行更改
        can.set(Calendar.YEAR,2020);
        System.out.println(can.get(Calendar.YEAR));
        //三个参数,默认是年月日
        can.set(2000,8,8);
        System.out.println(can.get(Calendar.YEAR));
        System.out.println(can.get(Calendar.MONTH));
        System.out.println(can.get(Calendar.DAY_OF_MONTH));
        //五个参数默认是:年月日时分
        //六个参数默认是:年月日时分秒
        can.set(2008,7,8,8,8,8);
        System.out.println(can.get(Calendar.YEAR));
        System.out.println(can.get(Calendar.MONTH));
        System.out.println(can.get(Calendar.DAY_OF_MONTH));
        System.out.println(can.get(Calendar.HOUR));
        System.out.println(can.get(Calendar.MINUTE));
        System.out.println(can.get(Calendar.SECOND));

        //在某一个字段的基础上偏移某一个值
        //正数:+
        //负数:-
        can.add(Calendar.YEAR,-1);
        System.out.println(can.get(Calendar.YEAR));
        //将Calendar转换为一个Date对象
        Date d = can.getTime();
        System.out.println(d);
    }
}

5.3 总结

  1. Date:表示某一个特定的时刻
    Date—>毫秒 getTime()
    毫秒值---->Date Date d = new Date(long 毫秒)

  2. SimpleDateFormat:格式化时间
    Date ----> String format()
    String -----> Date parse()

  3. Calendar:时间 表示时间对应的各个字段
    Calendar----Date getTime()

6 案例

输入一个年份,使用Calendar类型判断该年份是一个闰年还是平年
提示:2月28天是平年 2月29天是闰年

代码

package demos5_date;

import java.util.Calendar;
import java.util.Scanner;

public class Test03 {
    public static void main(String[] args) {
//        输入一个年份,使用Calendar类型判断该年份是一个闰年还是平年
//        提示:2月28天是平年   2月29天是闰年
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入年份:");
        int year = sc.nextInt();

        Calendar can = Calendar.getInstance();
        can.set(year,2,1);//2021  3  1
        //将以上的时间:天数-1    获取的就是2月的最后一天
        can.add(Calendar.DAY_OF_MONTH,-1);
        //获取的就是2月的最后一天
        int day = can.get(Calendar.DAY_OF_MONTH);
        System.out.println(day==28?"平年":"闰年");
    }
}

7 NumberFormat

  1. 概述:
    NumberFormat是所有数值格式的抽象基类,此类提供格式化和解析数值的方式,可 用于格式化和解析任何语言环境的数值
  2. 特点:
    (1)java.text包,需要导包
    (2)该类是一个抽象类,不能创建对象
    (3)该类提供了表示数字的不同格式

7.1 创建解析格式对象方法

方法名解释
public static final NumberFormat getInstance()返回当前默认环境的通用数值格式
public static final NumberFormat getCurrencyInstance()返回当前默认环境的货币格式
public static final NumberFormat getPercentInstance()返回当前默认环境的百分比格式

7.2 解析数字方法

方法名解释
public final String format(double number)按照指定对象格式,表示该数字

7.3 设置数字精确度方法

方法名解释
public void setMaximumFractionDigits(int newValue)设置小数部分所允许的最大位数
public void setMaximumIntegerDigits(int newValue)设置整数部分所允许的最大位数

代码

package demos6_numformat;

import java.text.NumberFormat;

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

        //创建一个数字格式化类型对象:默认格式(没有任何格式)
        NumberFormat nf1 = NumberFormat.getInstance();
        //设置数字小数部分最高保留3位
        nf1.setMaximumFractionDigits(3);
        //设置数字整数部分最高保留3为
        nf1.setMaximumIntegerDigits(3);
        String str = nf1.format(1234.1234567);
        System.out.println(str);
        //创建一个数字格式化类型:格式为¥
        NumberFormat nf2 = NumberFormat.getCurrencyInstance();
        //设置小数最高保留3位
        nf2.setMaximumFractionDigits(3);
        //设置整数最高保留3位
        nf2.setMaximumIntegerDigits(3);
        String str2 = nf2.format(1234.1234);
        System.out.println(str2);
        //创建一个数字格式化类型:格式   %
        NumberFormat nf3 = NumberFormat.getPercentInstance();
        //设置小数部分最低保留3位
        nf3.setMinimumFractionDigits(3);
        //设置整数部分最高保留3位
        nf3.setMaximumIntegerDigits(3);
        String str3 = nf3.format(231.123);//23112.3%
        System.out.println(str3);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值