java日期-Date类-SimpleDateFormat类-Calendar类

日期类

有三个:Date类、SimpleDateFormate类、Calender类
三个日期类的区别

区别Date类SimpleDateFormate类Calender类
作用用于创建一个Date类对象,代表它被分配的毫秒时间用于设置日期格式 和 解析日期为某一时刻操纵日历字段提供了一些方法
创建对象Date() 创建一个Date类对象并初始化,代表他被分配到的时间,单位是毫秒
Date(long date) 创建一个Date类对象,初始化为从基准时间1970年1月1日 间隔 long date毫秒的时间
SimpleDateFormate() 创建一个SimpleDateFormate对象
SimpleDateFormate(“日期格式”) 创建一个带有日期格式的SimpleDateFormate对象
Calender.getInstance() 创建Calender对象,
成员方法/属性对象.getTime() 获取从基准时间1970年1月1日00:00:00到现在时间的毫秒数
对象.setTime(long date) 设置时间,从基准时间间隔long date毫秒的时间
对象.formate(Date date) 将Date对象按照默认格式转化成字符串
对象.parse(String s) 实现将指定字符串转化成Date对象
对象.get(int field) 获取对应字段的内容
对象.set(int year,int month,int date) 根据年月日设置具体的时间
对象.add(int field,int amount) 给某字段增加或者减少amount值

Date类

概述

  • 有多个包中有Date类,本次学习的是java.util包中的类
  • Date类代表了一个特定的时间,以毫秒为精度

构造方法

方法名说明
public Date()分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date)分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数

构造方法说明:

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

* 原本输出应该是xxxxxx@xxx的字符串,实际输出:Tue Feb 01 17:21:34 CST 2022 ==* 说明Date类中重写了toString方法
long date = 1000*60*60;
	* 表示一小时 1=1000毫秒、1分钟=60秒、1小时=60Date dd = new Date(date);
 	* 输出的时间应该是1970111时,而不是原来的0System.out.println(dd);
 //Thu Jan 01 09:00:00 CST 1970 输出结果
	* 不是1时的原因:因为中国所处的位置是东八区,起始为8,所以此时加一个小时,输出为9

Date类的常用方法:对象.方法

方法名说明
public long getTime()获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
public void setTime(long time)设置时间,给的是毫秒值

常用方法说明:

System.out.println(d.getTime());//获取当前时间 以毫秒显示1643707950334
System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年"); //52.12164088527397年

#这样可以得到毫秒数换算之后的年
long time = 1000*60*60;//一小时
d.setTime(time);
System.out.println(d);
//Thu Jan 01 09:00:00 CST 1970

SimpleDateFormat类

概述

  • 软件包是java.text 中
  • SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式 格式化 和 解析日期。
  • SimpleDateFormat 允许选择日期时间格式化的任何用户定义的模式开始。
  • 日期和时间格式 = 日期和时间模式字符串指定,从A-Z以及a-z引号的字母被解释为表示日期或时间字符串组件的模式字母。
  • 常用的模式字母表示含义:y年、M月、d日、H时、m分、s秒。

构造方法

方法名说明
public SimpleDateFormat()构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat使用给定的模式和默认的日期格式

SimpleDateFormat常用方法

方法名说明
public final String format(Date date)格式化(从Date到String)
将日期格式化成日期/时间字符串
对象.format()
public Date parse(String source)解析(从String 到Date)
从给定字符串的开始解析文本以生成日期

格式说明:

// 131-test2
1 date 转 String
Date d = new Date();

SimpleDateFormat sd = new SimpleDateFormat();//采用默认构造方法,则转换日期格式采用默认类型。
String s = sd.format(d);//此方法需要参数Date类型对象 作用将日期类型转换为字符串
System.out.println(s);//输出:22-2-1 下午6:03 默认日期格式就是这样的
System.out.println("-------------------");

SimpleDateFormat sd2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//采用有参构造方法创建对象,自定义日期的格式
String s2 = sd2.format(d);
System.out.println(s2);//输出: 2022年02月01日 18:06:48
System.out.println("------------------");


2 StringDate
String s3 = "2022-2-1 19:46:12";
SimpleDateFormat sd3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//SimpleDateFormat类 实例化对象  的参数:日期格式=字符串的日期的格式,不然不能被解析
Date d1 = sd3.parse(s3);//这里会报错,有提示符号,点开选择第一个之后,报错消失,会在main方法后面加throws ParseException异常
System.out.println(d1);//Tue Feb 01 19:46:12 CST 2022

注意

  • 字符串转为日期类型
    字符串的日期格式类型 要和 SimpleDateFormate的参数(日期格式类型)保持一致,否则不能通过parse转换成功。

案例:日期工具类

需求:
定义一个日期类(DateUtils),包含两个方法:把日期转换为指定格式的字符串;把字符串解析为指定格式的日期,然后定义一个测试类(DateDemo),测试日期工具类的方法。

分析:

1 工具类:构造方法私有;成员方法静态
2 工具类中的构造方法是私有的,且被static修饰,要想使用其中的方法 ==》类名.方法名()

代码:

// 131-test3
public class DateUtils {
	// 无参构造方法
    private DateUtils(){}
    
 	// Date→String 
    public static String DateString(Date d ,String format){
        // format参数 被当做 形参传入
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        String s = sdf.format(d);
        return s;
    }
	// String→Date
    public static  Date StringDate(String s,String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date dd = sdf.parse(s);
        return dd;
    }
}
// 测试类 
public class DateDemo {
    public static void main(String[] args) throws ParseException {
    
        Date d = new Date();
        String sf = "yyyy年MM月dd日 HH:mm:ss";
        //类中的构造方法是私有的,直接使用类名.方法 对类中方法进行调用执行
        String s = DateUtils.DateString(d,sf);
        System.out.println(s);//2022年02月01日 20:55:23

        System.out.println("----------");
        
        String s2 = "2022年2月1日 21:20:23";
        String sf2 = "yyyy年MM月dd日 HH:mm:ss";
        //这里的s2定义格式要与DateUtils类中的StringDate方法中的SimpleDateFormat参数格式一样,否则不能转换
        Date dd = DateUtils.StringDate(s2,sf2);//这里调用也需要加ParseException
        System.out.println(dd);//Tue Feb 01 21:20:23 CST 2022
    }
}

Calendar类

概述

  • 软件包是 java.util,有直接子类GregorianCalendar
  • public abstract class Calendar 说明Calendar类是抽象类不能直接进行实例化,可以通过子类GregorianCalendar进行实例化
  • Calendar是抽象类,不能直接创建对象,它的构造方法用于子类访问父类数据的初始化
  • Caldendar提供了一个类方法,getInstance 用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
    Calendar rightNow = Calendar.getInstance(); 此日历对象是有内容的
  • Calendar类为某一时刻和一组日历字段之间的转换提供了一些方法,并为操纵日历字段提供了一些方法
  • 日历字段都是通过static修饰的,可以通过类名.成员变量进行访问
  • 如果一个方法的返回值是抽象类,其实它需要的是该类的子类对象

重要

//创建Calendar对象,通过多态的方式
Calendar c = Calendar.getInstance();
//获取各字段对应的具体数值
public int get(int field)
// 字段名称有
Calendar.YEAR 年、
Calendar.MONTH 月、
Calendar.Date

案例

public class CalendarDemo {
    public static void main(String[] args) {
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        //getInstance:返回值是Calendar对象,且是被static修饰的成员方法,可以直接通过 类名.方法名 调用
        
/*        public static Calendar getInstance()
        {
            return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
        }*/
        
        // private static Calendar createCalendar:主要涉及下述三个方法类进行对象的创建
        /*
        * cal = new BuddhistCalendar(zone, aLocale);
        public class BuddhistCalendar extends GregorianCalendar 
        继承于Calendar的子类GregorianCalendar
        
        cal = new JapaneseImperialCalendar(zone, aLocale);
        public class JapaneseImperialCalendar extends Calendar  
        继承于Calendar
        
        cal = new GregorianCalendar(zone, aLocale);
        public class GregorianCalendar extends Calendar 
        继承于Calendar
        * */
        
//        System.out.println(cal);//当前时间是:2022/2/5
        //输出值:time=1644027154301 时间;YEAR=2022 年;MONTH=1 月但是是从0开始编号的;WEEK_OF_YEAR=6 一年中的第6周;WEEK_OF_MONTH=1 一个月中的第一周

        //public int get(int field) 返回给定字段所对应的值
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;//因为月份是从0开始的所以要做加一操作
        int day = cal.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + day + "日");
    }
}

常用方法

方法名说明
public int get(int field)返回给定日历字段的值
对象.get
public abstract void add(int field,int amount)根据日历的规划,将指定的时间量field添加或减去给定的日历字段amount
对象.add
public final void set(int year,int month,int date)设置当前日历的年月日
对象.set

案例:测试常用方法

// 25-Calendar
//创建Calendar对象
Calendar c = Calendar.getInstance();

int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1 ;
int date = c.get(Calendar.DATE);
System.out.println(year + "年 "+month + "月 "+date +"日");
//当前日期:2022年 2月 5日

//public abstract void add(int field,int mount) Calendar中有抽象方法,所以它的子类一定重写了该方法,直接使用就好
//需求1:三年前的今天
c.add(Calendar.YEAR, -3);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH)+1;
date = c.get(Calendar.DATE);
System.out.println(year + "年 "+month + "月 "+date +"日");
//输出:2019年 2月 5日

//需求2:10年后的五天前
c.add(Calendar.YEAR, 10);
c.add(Calendar.DATE, -5);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH)+1;
date = c.get(Calendar.DATE);
System.out.println(year + "年 "+month + "月 "+date +"日");
//输出:2032年 1月 31日

c.set(2035, 10, 10);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH)+1;
date = c.get(Calendar.DATE);
System.out.println(year + "年 "+month + "月 "+date +"日");
//输出:2035年 11月 10日 因为月份是从0开始标号的,所以set设置的是10 实际上是11月

案例:二月天

需求:
获取任意一年的二月有多少天

设计思路:
输入年份–得到Calendar对象–设置日期为3月1日–取前一天输出日

public class CalendarDemo2 {
    public static void main(String[] args) {
        // 键盘录入一个年份
        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();

        //得到Calendar对象
        Calendar cal = Calendar.getInstance();

        //为Calendar对象设置 对应年的3月1日
        cal.set(year, 2, 1);
        //设置三月一日,set中month的参数应该是2

        // 取某年3月1日的前一天输出,表示当前年份2月的天数
        cal.add(Calendar.DATE, -1);
        System.out.println(year + "年的2月有" + cal.get(Calendar.DATE) + "天");
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值