日期相关的类 —— Date

1、java.util.Date

代码示例:

package test3_date_class;
//java.util下的Date

//import java.sql.SQLOutput;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d);
        System.out.println(d.toString());

        //划线原因:过期方法、过时方法、废弃方法(不建议用)
        //GMT时间
        System.out.println(d.toGMTString());
        //2022-9-28 17:21:19
        System.out.println(d.toLocaleString());

        System.out.println(d.getYear());  // 122    +1900 = 2022年
        System.out.println(d.getMonth()); // 8     +1 = 9月

        //返回自1970年1月1日以来,由 Date对象表示的00:00:00 GMT的毫秒数
        System.out.println(d.getTime());
        //System类下的方法,不是Date下的(但是功能一样的)
        System.out.println(System.currentTimeMillis());
        /*
       (1)疑问:以后获取时间差用:getTime()还是currentTimeMillis()?
        答案:currentTimeMillis(),因为这个方法是静态的,可以类名.方法名直接调用
        (2)public static native long currentTimeMillis();
        本地方法
        为什么没有方法体?因为这个方法的具体实现不是通过java写的。
       (3)这个方法的作用:
        一般会去衡量一些算法所用的时间
         */
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100; i++) {
            System.out.println(i);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime); //毫秒
    }
}

2、java.sql.Date 

代码示例:

package test3_date_class;

//java.sql下的Date

//import javax.xml.crypto.Data;
import java.sql.Date;

public class Test2 {
    public static void main(String[] args) {
        //导包还是出现错误,是因为没有空构造器
        //参数为long类型的数(后面加个L)
        Date d = new Date(1664358106118L);
        System.out.println(d);
        /*
          (1)java.sql.Date和java.util.Date的区别:
          java.util.Date:年月日  时分秒
          java.sql.Date:年月日
          (2)java.sql.Date和java.util.Date的联系:
          java.sql.Date(子类) extends java.util.Date (父类)
         */
        //java.sql.Date和java.util.Date相互转换:
        //【1】util--->sql:
        //java.util.Date date = new java.util.Date();//创建util.Date的对象
        //上一行代码会提示类型转换异常
        //改为: util.Date 等于 (具体的) sql.Date(对象) 才行
        java.util.Date date = new Date(1664358106118L);
                           //new Date(1664358106118L)直接从13行拿过来的
                           //即一个sql.Date对象
        //方式1:向下转型
        Date date1 = (Date)date;
        //上一行代码会提示类型转换异常  (将24行改为27行即可)
        //因为:
        /*
            父类:Animal 子类:Dog
            // Animal an = new Animal(); —— 不行,Animal an得是一条具体的狗才行
            Animal an = new Dog();
            Dog d = (Dog)an;
        */
        //方式2:利用构造器
        Date date2 = new Date(date.getTime());//date.getTime()相当于664358106118L

        //【2】sql---> util
        //f父类引用指向子类对象,直接转
        java.util.Date date3 = d;

        //【3】String ---> sql.Date(利用valueOf()这一常用的方法)
        Date date4 = Date.valueOf("2022-6-6");
    }
}

3、SimpleDateFormat 

【1】String---》java.util.Date 类型转换:

(分步进行)分解:

(1)String--->java.sql.Date

(2)java.sql.Date--->java.util.Date

代码示例:

package test3_date_class;

import javax.tools.JavaCompiler;
/*
  String --->java.util.Date 类型转换:
  分解:
 (1)String--->java.sql.Date
 (2)java.sql.Date--->java.util.Date
*/
public class Test3 {
    public static void main(String[] args) {
        // String ---> java.sql.Date
        java.sql.Date date = java.sql.Date.valueOf("2020-1-1");
        // java.sql.Date ---> java.util.Date
        java.util.Date date2 = date;
        System.out.println(date.toString());

        //上面的代码有局限性,字符串的格式只能是年-月-日拼接的形式,
        //换成其它(比如:年/月/日)类型,就会出现异常
        //故,引入新的类:SimpleDateFormat ,见Test4
    }
}

上面的代码有局限性,字符串的格式只能是年-月-日拼接的形式,换成其它类型,就会出现异常:

【2】引入新的类:SimpleDateFormat  —— 自定义自己的时间格式

日期格式:

 代码示例:

package test3_date_class;

import java.sql.SQLOutput;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test4 {
    public static void main(String[] args) {
        //日期转换
        //报错了
        //原因:DateFormat类是抽象类,而抽象类是不能创建对象的
        //DateFormat df = new DateFormat();
        //所以,改用:
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //点进去,发现 SimpleDateFormat 继承自 DateFormat
        //所以,这里是:父类(抽象类)引用指向子类对象,是可以的

        //上面,格式化的标准已经定义好了,如:yyyy-MM-dd HH:mm:ss
        //所以,接下来就可以实现互相转换:
        //通过上面定义的df即可:
        //1)String ---> Date
        //用到了parse()方法
        try {
            Date D = df.parse("2020-8-5 11:25:53");//提示有异常,自己捕获即可
            System.out.println(D); //注意,这里是util类型的Date,所以输出的格式是这样的
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //2)Date ---> String
        //用到了format()方法
        //df.format(new Date()); //先创建一个Date对象 ,
                  // 再将该对象以 "yyyy-MM-dd HH:mm:ss" 的形式赋给String类型的对象
        String format = df.format(new Date());
        System.out.println(format);
        //而new Date()是获取当前的时间(只是格式是默认的)
        System.out.println(new Date());
        
        System.out.println("Date ---> String ,以前的转换方式");
        //Date类型往String类型的转换,以前通过如下方式进行了转换:
        //(注:但都不是按照自己自定义的方式进行输出的,这是和format()方法的不同)
        Date date = new Date();
        System.out.println(date);
        //同:
        System.out.println(date.toString());
        //下面两种已经被弃用了(不建议用了)
        System.out.println(date.toGMTString());
        System.out.println(date.toLocaleString());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值