常用API(JDK7时间类)

chj020415 / 2023-05-07 / 原文

常用API(JDK7时间类)

Date类

概念: 用来描述时间,精确到毫秒
常用方法:
public Date()           创建Date对象,表示当前时间
public Date(long date)  创建Date对象,表现指定时间
public void setTime(long time)      设置/修改毫秒值
public long getTime()               获取时间对象的毫秒值
例子:
package com.caihongjia2.a01jdkdatedmeo;

import java.util.Date;

public class DateDemo1 {
    public static void main(String[] args) {
        /*

            时间原点: 1970年1月1日星期四 00:00:00
            时间原点(中国,东八区): 1970年1月1日星期四 08:00:00

            public Date()           创建Date对象,表示当前时间
            public Date(long date)  创建Date对象,表现指定时间

            public void setTime(long time)      设置/修改毫秒值
            public long getTime()               获取时间对象的毫秒值
        */

        //1.创建对象表示一个时间
        Date d = new Date();
        System.out.println(d);

        //2.创建对象表示一个指定的时间
        Date d2 = new Date(0L);
        System.out.println(d2);

        //3.setTime 修改时间
        //1000毫秒=1秒
        d2.setTime(1000L);//从时间原点过了1000毫秒的时间
        System.out.println(d2);

        //getTime获取当前时间的毫秒值
        long time = d2.getTime();
        System.out.println(time);
    }
}
package com.caihongjia2.a01jdkdatedmeo;

import java.util.Date;
import java.util.Random;

public class DateDemo2 {
    public static void main(String[] args) {
        /*
            需求1:打印时间原点开始一年之后的时间
            需求2:定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后

         */

        //需求2:定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后

        Random r = new Random();

        //创建两个时间对象
        Date d1 = new Date(Math.abs(r.nextInt()));//在int取值范围之内的随机正整数,abs:绝对值
        Date d2 = new Date(Math.abs(r.nextInt()));
        long time1 = d1.getTime();
        long time2 = d2.getTime();

        if (time1 > time2){
            System.out.println("第一个时间在后面,第二个时间在前面");
        }else if(time1 < time2){
            System.out.println("第二个时间在后面,第一个时间在前面");
        }else{
            System.out.println("表示两个时间一样");
        }

    }

    private static void extracted() {
        //需求1:打印时间原点开始一年之后的时间
        //1.创建一个对象,表示时间原点
        Date d1 = new Date(0L);
        System.out.println(d1);

        //2.获取d1时间的毫秒值
        long time = d1.getTime();

        //3.在这个基础上我们要加一年的毫秒值即可
        time = time + 1000L * 60 * 60 * 24 * 365;
        System.out.println(time);

        //4.把计算好的时间毫秒值,再设置回d1当中
        d1.setTime(time);

        //5.打印d1
        System.out.println(d1);
    }
}

SimpleDateFormat类

概念:
1.格式化: 把时间变成我们喜欢的格式
2.解析: 把字符串表示的时间变成Date对象
构造方法:
public SimpleDateFormat()                   默认格式
public SimpleDateFormat(String pattern)     指定格式
常用方法:
public final String format(Date date)       格式化(日期对象 -> 字符串)
public Date parse(String source)            解析(字符串 -> 日期对象)
例子:
package com.caihongjia2.a01jdkdatedmeo;

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

public class SimpleDateFormatDemo01 {
    public static void main(String[] args) throws ParseException {
        /*
                public SimpleDateFormat()                   默认格式
                public SimpleDateFormat(String pattern)     指定格式

                public final String format(Date date)       格式化(日期对象 -> 字符串)
                public Date parse(String source)            解析(字符串 -> 日期对象)
         */


        //1.定义一个字符串表示时间
        String str = "2023-11-11 11:11:11";
        //2.利用空参构造创建SimpleDateFormat对象
        //细节:
        //创建对象的格式要跟字符串的格式完全一致
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);
        //3.打印结果
        System.out.println(date.getTime());

        method();
    }

    private static void method() {
        //1.利用空参构造创建SimpleDateFormat对象,默认格式
        SimpleDateFormat sdf1 = new SimpleDateFormat();
        Date d1 = new Date(0L);
        String str1 = sdf1.format(d1);
        System.out.println(str1);//1970/1/1 08:00

        //2.利用带参构造创建SimpleDateFormat对象,指定格式
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
        String str2 = sdf2.format(d1);
        System.out.println(str2);//1970年01月01日 08:00:00 周四
    }
}
package com.caihongjia2.a01jdkdatedmeo;

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

public class SimpleDateFormatDemo02 {
    public static void main(String[] args) throws ParseException {
        /*
            假设:你初恋的出生日期为:2000-11-11
            请用字符串来表示这个数据,并将其转换为:2000年11月11日

        */

        //将字符串转换为日期对象
        String str="2000-11-11";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//与字符串一致的格式
        Date date = sdf1.parse(str);

        //将日期对象转换为对应的字符串格式
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
        String str2 = sdf2.format(date);
        System.out.println(str2);


    }
}
package com.caihongjia2.a01jdkdatedmeo;

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

public class SimpleDateFormatDemo03 {
    public static void main(String[] args) throws ParseException {
        /*
            秒杀活动:2023年11月11日 0:0:0(毫秒值)
            结束时间:2023年11月11日 0:10:0(毫秒值)

            小贾下单并付款的时间为:2023年11月11日 0:01:0
            小皮下单并付款的时间为:2023年11月11日 0:11:0
         */

        String startStr = "2023年11月11日 0:0:0";
        String endStr = "2023年11月11日 0:10:0";
        String orderStr1 = "2023年11月11日 0:01:0";
        String orderStr2 = "2023年11月11日 0:11:0";

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date startDate = sdf.parse(startStr);
        Date endDate = sdf.parse(endStr);
        Date orderDate1 = sdf.parse(orderStr1);
        Date orderDate2 = sdf.parse(orderStr2);

        long startTime = startDate.getTime();
        long endTime = endDate.getTime();
        long orderTime1 = orderDate1.getTime();
        long orderTime2 = orderDate2.getTime();

        if (orderTime1 >= startTime && orderTime1 <= endTime){
            System.out.println("参加活动成功");
        }else{
            System.out.println("参加活动失败");
        }

        if (orderTime2 >= startTime && orderTime2 <= endTime){
            System.out.println("参加活动成功");
        }else{
            System.out.println("参加活动失败");
        }
    }
}

Calendar类

概念:
1.表示一个时间的日历对象
2.可以单独修改、获取时间中的年、月、日
3.Calendar是一个抽象类,不能直接创建对象,使用getInstance()方法获取日历对象
底层原理:
//会根据系统的不同时区来获取不用的日历对象,默认表示当前时间
常用方法:
public static Calendar getInstance()        获取当前时间的日历对象

public final Date getTime()                 获取日期对象
public final setTime(Date date)             给日历设置日期对象

public long getTimeInMillis()               拿到时间毫秒值
public void setTimeInMillis(long millis)   给日历设置时间毫秒值

public int get(int field)                   取日期中的某个字段信息
public void set(int field,int value)        修改日历的某个字段信息
public void add(int field,int amount)       为某个字段增加/减少指定的值
例子:
package com.caihongjia2.a01jdkdatedmeo;

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

public class CalendarDemo01 {
    public static void main(String[] args) {
        /*
            public static Calendar getInstance()        获取当前时间的日历对象

            public final Date getTime()                 获取日期对象
            public final setTime(Date date)             给日历设置日期对象

            public long getTimeInMillis()               拿到时间毫秒值
            public void setTimeInMillis(long millis)   给日历设置时间毫秒值

            public int get(int field)                   取日期中的某个字段信息
            public void set(int field,int value)        修改日历的某个字段信息
            public void add(int field,int amount)       为某个字段增加/减少指定的值

         */

        //1.获取日历对象
        //细节1:Calendar是一个抽象类,不能直接new,而是通过一个静态方法获取子类对象
        //底层原理:
        //会根据系统的不同时区来获取不用的日历对象,默认表示当前时间
        //把会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中
        //0 : 纪元
        //1 : 年
        //2 : 月
        //3 : 一年中的第几周
        //4 : 一个月中的第几周
        //5 : 一个月中的第几天(日期)
        //.... 16
        //细节2:
        //月份:范围0~11  如果获取出来的是11,那么实际上是1月
        //星期:在老外的眼里,星期日是一周中的第一天
        //    1(星期日)    2(星期一)    3(星期二)    4(星期三)      5(星期四)      6(星期五)      7(星期六)
        Calendar c = Calendar.getInstance();


        //2.修改日历代表的时间
        Date d = new Date(0L);
        c.setTime(d);

        System.out.println(c);

        //public int get(int field)                   取日期中的某个字段信息
        //public void set(int field,int value)        修改日历的某个字段信息
        //public void add(int field,int amount)       为某个字段增加/减少指定的值

        c.set(Calendar.YEAR,2023);
        c.set(Calendar.MONTH,8);
        c.set(Calendar.DAY_OF_MONTH,10);

        //调用方法在这个基础上增加一个月
        c.add(Calendar.MONTH,1);//正加负减

        //java在Calendar类中,把索引对应的数字都定义成了常量
        int year = c.get(Calendar.YEAR);//年
        int month = c.get(Calendar.MONTH) + 1 ;//月
        int date = c.get(Calendar.DATE);//日
        int week = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(year + ","  + month + "," + date + "," + getWeek(week));//1970,1,1


    }

    //查表法:
    //表:容器
    //让数据跟索引产生对应的关系

    //传入对应的数字: 1~7
    //返回对应的星期
    public static String getWeek(int index){
        String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        //根据索引返回对应的星期
        return arr[index];
    }
}
结论:
1.日历类中月份的范围:0~11
2.日历类中星期的特点:星期日是一周的第一天