常用类库②(Date、Calendar、SimpleDateFormat、DecimalFormat)

常用类库( java.util、java.text)

java.util包中放置了Java开发过程中常用的工具类,如日期时间类,日历类等等

java.util包常用类

  • Date
  • Calendar及其子类
  • 集合接口以及实现类
  • 集合工具类
  • 数组工具类等等

一、Date类

Date类表示特定的时间,可以精确到毫秒。
Date类的构造方法:

  • Date() 无参构造方法
  • Date(long time) 有长整形参数的构造方法
  • 其他构造方法已经废弃不用

Date类常用方法

  • long getTime();返回1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
  • String toString();将Date对象转换为字符串,默认的转换格式为:dow mon dd hh:mm:ss zzz yyyy
package com.changyongleiku.Date_1;

import java.util.Date;

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


        //Date:时间      Data:数据
        Date d = new Date();//获取当前时间
        System.out.println(d);//Fri Jul 23 09:18:58 CST 2021

        //表示自从标准基准时间(称为“历元(epoch)”,
        // 即 1970 年 1 月 1 日 08:00:00 GMT)以来的指定毫秒数。
        Date d_1 = new Date(1000);
        System.out.println(d_1);//Thu Jan 01 00:00:01 CST 1970


        //after   测试此日期是否在指定日期之后。
        boolean aft = d.after(d_1);
        System.out.println(aft);//true

        //before  测试此日期是否在指定日期之前。

        //compareTo  测试此日期是否在指定日期之前。

        //equals    比较两个日期的相等性。


        //getTime  返回自 1970 年 1 月 1 日 00:00:00 GMT
        // 以来此 Date 对象表示的毫秒数。
        long time = d.getTime();
        System.out.println(time);//1627003589844

    }
}

二、Calendar类及其子类

Calendar类

  • java.util.Date类中获取当前年、月、日和将时间格式化以及将字符串类型的日期转换为Date对象的方法都已经被废弃。
  • 如果想要获取Date对象的年、月、日、星期等操作,需要使用Calendar类以及其子类完成。
  • Calendar是一个抽象类,它为获取和修改年、月、日、星期等日历字段提供了一系列的方法。

Calendar常用方法

  • Calendar getInstance();返回一个Calendar对象
  • void set(int field,int x);设置日历字段的值
  • void get(int field);获取某个日历字段的值
  • java.util.Date getTime();返回代表该日历对象的Date值
  • void setTime(java.util.Date date);使用指定的Date设置该日历对象
  • 常用的日历字段
  • AM_PM 上午或者下午
  • YEAR 年 MONTH 月 DATE 日 HOUR 12小时制 HOUR_OF_DAY 24小时制 MINUTE 分钟 SECOND 秒 MILLISECOND 毫秒

java.util.GregorianCalendar类

GregorianCalendarCalendar的一个直接子类

  • 提供了世界上大多数国家/地区使用的标准日历系统,即中国所谓的阳历或者公历

    常用方法

  • boolean isLeapYear(int year) 判断指定年份是不是闰年

  • void add(int field ,int x)为指定的日历字段增加值

package com.changyongleiku.Calendar_1;

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

public class Main {
    public static void main(String[] args) {
        //Calender:日历   抽象类

        GregorianCalendar gre = new GregorianCalendar();//获取当前时间
        System.out.println(gre);//java.util.GregorianCalendar[time=1627003864538,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=6,WEEK_OF_YEAR=30,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=204,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=9,HOUR_OF_DAY=9,MINUTE=31,SECOND=4,MILLISECOND=538,ZONE_OFFSET=28800000,DST_OFFSET=0]
//获取时间日期
        //get  获取下标位置的值
        //Calendar.YEAR  静态常量    获取年位置的的下标
        int i = gre.get(Calendar.YEAR);
        System.out.println(i);//2021
        int i2 = gre.get(Calendar.MONTH);
        System.out.println(i2);//6
        int i1 = gre.get(Calendar.DAY_OF_MONTH);
        System.out.println(i1);//23

        //日期
        String time = i + "年" + (i2+1)+ "月" + i1 +"日  ";
        System.out.println(time);//2021年7月23日

        //时间:
        int i3 = gre.get(Calendar.HOUR_OF_DAY);//24小时制
        int i4 = gre.get(Calendar.MINUTE);//分
        int i5 = gre.get(Calendar.SECOND);//秒
        String time_1 = i3+"时"+i4+"分"+i5+"秒  ";
        System.out.println(time_1);//9时48分50秒

        int i6 = gre.get(Calendar.AM_PM);//上午下午   0/1

        //星期
        int i7 = gre.get((Calendar.DAY_OF_WEEK));
        System.out.println(i7);//


        String[] aps = {"上午:  ","下午:  "};
        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

        //日期
        String date_1 = time+aps[i6]+time_1+weeks[i7];
        System.out.println(date_1);//2021年7月23日  上午:  9时55分46秒  星期六

//设置时间日期

        //set    更改年份为2031
        gre.set(Calendar.YEAR,2031);
        System.out.println(gre.get(Calendar.YEAR));//2031

        //add    在基础之上加多少
        gre.add(Calendar.YEAR,10);
        System.out.println(gre.get(Calendar.YEAR));//2041

        Calendar instance = Calendar.getInstance();
        System.out.println(instance);//和这个结果一样 GregorianCalendar gre = new GregorianCalendar();/



        //isLeapYear()  确定给定的年份是否为闰年。
        boolean leapYear = gre.isLeapYear(2021);
        System.out.println(leapYear);//false

//Date<-->Calendar  相互转换

        GregorianCalendar gre_1 = new GregorianCalendar();
        Date time1 = gre_1.getTime();//获取Date对象
        gre_1.setTime(time1);//将Date转Calender
        System.out.println(time1);
        System.out.println(gre_1);

        Date d = new Date();
        System.out.println("asdad"+d);
        gre_1.setTime(d);
        System.out.println(gre_1);
        
        
        // 1 Calendar转化为Date
        Calendar cal =Calendar.getInstance();
        Date date =cal.getTime();

        //2 Date转化为Calendar
        Date date_2=new Date();
        Calendar cal_1 =Calendar.getInstance();
        cal_1.setTime(date_2);
        
        
    }
}

获取日期:

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

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

        GregorianCalendar gre = new GregorianCalendar();
        //日期
        int i = gre.get(Calendar.YEAR);//年
        int i2 = gre.get(Calendar.MONTH);//月
        int i1 = gre.get(Calendar.DAY_OF_MONTH);//日

        //时间:
        int i3 = gre.get(Calendar.HOUR_OF_DAY);//24小时制
        int i4 = gre.get(Calendar.MINUTE);//分
        int i5 = gre.get(Calendar.SECOND);//秒
        int i6 = gre.get(Calendar.AM_PM);//上午下午

        //星期
        int i7 = gre.get((Calendar.DAY_OF_WEEK));//星期
        String[] aps = {"上午:  ","下午:  "};
        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        //日期
        String time = i + "年" + (i2+1)+ "月" + i1 +"日  ";//日期
        String time_1 = i3+"时"+i4+"分"+i5+"秒  ";//时间

        String date_1 = time+aps[i6]+time_1+weeks[i7];
        System.out.println(date_1);
    }
}

三、java.text包(SimpleDateFormat/NumberFormat)

提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口
java.text包常用类或者接口

  • DateFormat以及子类SimpleDateFormat
  • NumberFormat以及子类DecimalFormat

DateFormat

DateFormat是一个抽象的时间格式化类

  • DateFormat 是日期/时间格式化的抽象类,它以与语言无关的方式格式化并解析日期或时间。
  • DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
  • 在格式化和解析日期时间过程中,其子类SimpleDateFormat更为常用

SimpleDateFormat类

SimpleDateFormat类

  • 是一个以与语言环境有关的方式来格式化和解析日期的具体类
  • 它提供了格式化日期时间(日期时间字符串)和解析日期时间(字符串日期时间)的方法

SimpleDateFormat构造方法

  • SimpleDateFormat()
  • SimpleDateFormat(String pattern) 按照指定的模式创建
  • SimpleDateFormat对象

日期时间模式

请添加图片描述

常用方法

  • String format(Date date);将一个java.util.Date对象按照指定的模式格式化为日期
  • Date parse(String date);将一个日期字符串按照指定模式解析为java.util.Date类型的对象
public class Main {
    public static void main(String[] args) {

        Date date = new Date();

 //时间的格式化:   Date -->  String
        //时间转字符串  format()
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.format(date);
        System.out.println(date);//Mon Jul 26 09:24:15 CST 2021

        String format = sdf.format(date);
        System.out.println(format);//21-7-26 上午9:25

        //在构造方法种设置输出的格式
        SimpleDateFormat sdf_1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss E a");
        String format1 = sdf_1.format(date);
        System.out.println(format1);//2021.07.26 09:32:14 星期一 上午

        
//String-->Date    parse()
        String t = "2020-07-26 09:32:14";
        SimpleDateFormat sdf_2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parse = sdf_2.parse(t);
        System.out.println(parse);//Sun Jul 26 09:32:14 CST 2020


    }
}

时间格式化,写成功能模块

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

public class Dateutil {
    //Date -- > String
    public static String d_S(Date date,  String oattern){
        SimpleDateFormat sdf = new SimpleDateFormat(oattern);
        String format = sdf.format(date);
        return format;
    }

    //String -- > Date 
    public static Date s_D(String time,String oattern){
        SimpleDateFormat sdf = new SimpleDateFormat(oattern);
        Date parse = null;
        try {
            parse = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return parse;
    }
}
String s = Dateutil.d_S(new Date(), "MM-dd");
System.out.println(s);//07-26

Date date1 = Dateutil.s_D("2000-10-10", "yyyy-MM-dd");
System.out.println(date1);//Tue Oct 10 00:00:00 CST 2000

NumberFormat

NumberFormat是一个数字格式化抽象类
该类提供了格式化和解析数值的方法

常用方法

  • String format(double d)将数字格式化为字符串
  • Number parse(String s)将字符串解析为数字
  • void setMaximumFractionDigits(int newValue)设置最大小数位
  • void setMinimumFractionDigits(int newValue) 设置最小小数位
  • 通常情况下会使用其子类DecimalFormat格式化或者解析数字

DecimalFormat类

  • DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。

构造方法

  • DecimalFormat()
  • DecimalFormat(String pattern)按照指定模式构建对象

数字模式字符

请添加图片描述

常用方法

  • String format(double d);格式化数字为字符串
  • Number parse(String str);解析字符串数字为Number对象
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;

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

        //数字格式化
        double n = 123456789.213;
        DecimalFormat df = new DecimalFormat();

//number-->String
        String format = df.format(n);
        System.out.println(format);//123,456,789.213

        //"0,0000.00"   表示保留两位小数,整数部分每隔四位逗号隔开。
        DecimalFormat df_1 = new DecimalFormat("0,0000.00");
        String format1 = df_1.format(n);
        System.out.println(format1);//1,2345,6789.21


        //0的话  不存在也会补0,#不会
        double n1 = 123456789.2;
        DecimalFormat df_2 = new DecimalFormat("#,##0.00");
        String format2 = df_1.format(n1);
        System.out.println(format2);//1,2345,6789.20

        //保留小数部分2-5位 #.00###
        double n2 = 123456789.2;
        DecimalFormat df_3 = new DecimalFormat("#,##0.00###");
        String format4 = df_1.format(n2);
        System.out.println(format4);//1,2345,6789.20
        df_3.setMaximumFractionDigits(5);//最大小数位
        df_3.setMinimumFractionDigits(2);//最小小数位


// String-->number
        String str = "1,2345,6789.20";
        DecimalFormat dec_1 = new DecimalFormat();
        Number parse = dec_1.parse(str);
        System.out.println(parse);//1.234567892E8

        int i = parse.intValue();
        System.out.println(i);//123456789
        
//%    "#,##0.##%"  
        System.out.println("\u2030");//‰  千分符号

    }
}

四、练习题

为了以后开发方便,提供一个日期时间工具类,该类提供如下方法

  1. 将Date对象转换为指定模式的字符串对象。
  2. 将字符串日期时间按照指定模式解析为日期时间对象。

  1. 将数字转换为指定模式的字符串对象
  2. 将字符串数字按照指定模式解析为数字
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Dateutil {
    //日期
    //Date -- > String
    public static String d_S(Date date,  String oattern){
        SimpleDateFormat sdf = new SimpleDateFormat(oattern);
        String format = sdf.format(date);
        return format;
    }

    //String -- > Date
    public static Date s_D(String time,String oattern){
        SimpleDateFormat sdf = new SimpleDateFormat(oattern);
        Date parse = null;
        try {
            parse = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return parse;
    }

    //数字
    //number -- > String
    public static String d_S_1(Number num){
        DecimalFormat dec_1 = new DecimalFormat();
        String format = dec_1.format(num);
        return format;
    }

    //String -- > number
    public static Number s_D_1(String num) {
        DecimalFormat dec_2 = new DecimalFormat();
        Number parse_2 = null;
        try {
            parse_2 = dec_2.parse(num);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return parse_2;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值