Date类

Date获取时间

获取当前时间

        // 创建了对应当前时间的Date对象
        Date date = new Date();
        System.out.println(date.toString());  // Sat Dec 21 21:03:39 CST 2019
        System.out.println(date.getTime()); // 获取时间戳  1576933656356

时间有当前时间有时间戳模式

getTime()获取当前时间的时间戳


        Date date = new Date();

        System.out.println(date.getTime()); // 获取时间戳  1576933656356

创建sql-Date, 就是带有详细年月日的模式

        // 创建Sql 的Date
        Date date2 = new java.sql.Date(1576933603968L);
        System.out.println(date2);

时间戳转化为当前模式调用当前模式的构造器

        // 创建指定毫秒数的对象
        Date date1 = new Date(1576933603968L);
        System.out.println(date1.toString()); // Sat Dec 21 21:06:43 CST 2019

 util.Date 与sql.Date 的相互转化 

 

  util.Date ---> sql.Date

        // 如何将util.Date转化为 sql.Date
        // 情况一:
        Date date3 = new java.sql.Date(1576933603968L);
        Date date4 = (java.util.Date) date3;

        //情况二:
        Date date5 = new Date();
        java.sql.Date date6 = (java.sql.Date) date5;

sql.Date ----> util.Date 

需要调用sql.Date的getTime将其转化为时间戳才能转化为util.Date

        Date date1 = new Date();
        java.sql.Date sqlDate = new java.sql.Date(date1.getTime());
        System.out.println(sqlDate);  // 2020-01-06
        Date date2 = new Date(sqlDate.getTime());  // Mon Jan 06 14:55:15 CST 2020

SimpleDateFormat

SimpleDateFormat 两种方式

格式化:  日期 ---》 String
解析    String ---》 Date
public class SimpleDateFormatTwo {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = simpleDateFormat.format(date);
        System.out.println(strDate);

        try {
            Date dateStr = simpleDateFormat.parse(strDate);  // 解析 : String --- 》 Date
            System.out.println(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }


        String strDateOne = "2018-06-07 11:22:63";
        SimpleDF simpleDF = new SimpleDF();
        simpleDF.getStrDate(strDateOne);


        Date date1 = new Date();
        java.sql.Date sqlDate = new java.sql.Date(date1.getTime());
        System.out.println(sqlDate);  // 2020-01-06
        Date date2 = new Date(sqlDate.getTime());  // Mon Jan 06 14:55:15 CST 2020
        System.out.println(date2);
        Date date3 = new Date();
        Date date4 = sqlDate;
        System.out.println(date4);

    }
}

在解析的时候 使用parse必须使用try来修饰

// 把日期   2020-01-06 10:33:02 转为sql,Date
class SimpleDF{
    public  Date getStrDate(String str){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if(str != null){
            try{
                Date date = sdf.parse(str);
                if(date != null){
                    java.sql.Date dateOne = new java.sql.Date(date.getTime());
                    return dateOne;
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return null;
    }
}

Calendar 日历类

Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。

Calendar的实现需要调用本身的getIstance()方法来实现

Calendar c1 = Calendar.getInstance();

Calendar的方法

        Calendar c1 = Calendar.getInstance();

        // set设置时间
        c1.set(2019,11,13);
        System.out.println(c1.getTime()); // 获取时间  Fri Dec 13 20:14:42 CST 2019

        // get 获取时间 需要由Calendar这个类本身来获取
        System.out.println(c1.get(Calendar.DAY_OF_MONTH)); // 13 获取天数为当月的第几天
        System.out.println(c1.get(Calendar.DATE)); // 13  获取天
        System.out.println(c1.get(Calendar.MONTH)); // 11 获取月


        //add()对时间增加或者减少
        c1.add(Calendar.YEAR,1);  // 把年增加1
        System.out.println(c1.get(Calendar.YEAR)); //  2020

        c1.add(Calendar.YEAR, -1); // 减少一年
        System.out.println(c1.get(Calendar.YEAR)); // 获取年 2019



        // 获取日历类时间的当前时间Date
        System.out.println(c1.getTime());  //  Fri Dec 13 20:21:21 CST 2019


        // Date ----> Calendar
        Date date = new Date(); // 当前时间
        c1.setTime(date);
        System.out.println(c1.get(Calendar.YEAR));  // 2020 时间因为上面的修改已经被修改为当前时间了

可以看到这个时间是随着我们的修改而可以随时修改的

注意:
 获取月份时:一月是0,二月是1,以此类推,12月是11

 获取星期时:周日是1,周二是2 , 。。。。周六是7

以上是jdk8之前的Date  下面是jdk8之后的Date

之前的时间api都有一些不好的特性

可变性:可以随时修改 修改后获取的时间就随之改变了  像时间这类是不应该 被修改的

偏移性:Date中的年份是从1900开始的,而月份都从0开始。

格式化:格式化只对Date有用,Calendar则不行。

此外,它们也不是线程安全的;不能处理闰秒等。

java8新Date API

LocalDate  LocalTime  LocalDateTime

LocalDate: 本地日期  只能获取某年某月某日

LocalTime  本地时间  只能获取某小时某分某秒 表示的是时间不是日期

LocalDateTime  本地日期时间 

LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。 
LocalTime表示一个时间,而不是日期。
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。

操作方法

        // 实例化都是调用now
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();


        System.out.println(localDate);  // 2020-01-06
        System.out.println(localTime);   // 20:44:15.991
        System.out.println(localDateTime);  // 2020-01-06T20:44:15.991


        // 设置时间  此处可以看到不可变性 虽然设置了时间但是本身的还是不变

        System.out.println(localDate.of(2019,12,23));  // 2019-12-23
        System.out.println(localDate);  // 此时获取的时间还是当前时间  2020-01-06

        System.out.println(localTime.of(11, 22)); // 11:22
        System.out.println(localTime);   // 20:46:54.321

        System.out.println(localDateTime.of(2018, 11, 11, 13, 24));  // 2018-11-11T13:24
        System.out.println(localDateTime); // 当前时间仍是不变  2020-01-06T20:47:40.502


        //
        System.out.println(localDateTime.getDayOfMonth()); // 获取当前时间是这个月的第几天
        System.out.println(localDateTime.getDayOfWeek()); // 获取是星期几  MONDAY
        System.out.println(localDateTime.getMonth()); // 获取月份JANUARY


        //with  将时间修改为新的时间并返回新的值
        System.out.println(localDateTime.withDayOfMonth(12));  // 2020-01-12T20:58:35.993
        System.out.println(localDateTime.withMonth(6)); // 设置月份  2020-06-06T21:03:45.020


        // plus  添加

        System.out.println(localDateTime.plusMonths(4));  //当前时间增加4个月
        System.out.println(localDateTime.plusHours(11));  // 当前时间增加11小时


        // minus  减去
        System.out.println(localDateTime.minusHours(3));  // 当前时间减去3小时
        System.out.println(localDateTime.minusDays(2));  // 当前时间减去2天

 

  

原文地址:https://www.cnblogs.com/zhaoyunlong/p/12081071.html