15、JDK 8 之前的时间 API

一、java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时
间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。

@Test
public void test(){
    long time = System.currentTimeMillis()//时间戳,可用于生成订单号
}

此方法适于计算时间差。
计算世界时间的主要标准有:

  • UTC(Coordinated Universal Time)
  • GMT(Greenwich Mean Time)
  • CST(Central Standard Time)

二、java.util.Date类

表示特定的瞬间,精确到毫秒

构造器:

  • Date(): ++使用无参构造器创建的对象可以获取本地当前时间++。
  • Date(long date)

常用方法

  • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象
    表示的毫秒数。
  • toString():把此 Date 对象转换为以下形式的 String: dow mon dd
    hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue,
    Wed, Thu, Fri, Sat), zzz是时间标准。
  • 其它很多方法都过时了
import java.util.Date;//记得导包
@Test
public void test(){
    Date date = new Date();
System.out.println(date);
System.out.println(date.toString());//日期
System.out.println(date.getTime());//毫秒数

//把毫秒数便成日期
Date date1 = new Date(date.getTime());
System.out.println(date1.toString());
}

三、 java.sql.Date对应着数据库中的日期类型的变量

1、如何实例化(创建java.sql.Date的对象)

@Test
public void test(){
    java.sql.date date = new java.sql.Date();
    //和lang.Date同时出现时,写全类名
    System.out,println(date.toString());
    //2020-11-11
}

2、sql.Date --> util.Date对象

直接复制(多态性)(++sql.Date 是 util.Date 的子++类)

3、如何将 util.Date --> sql.Date对象

@Test
public void Teat(){
     //情况一
     Date date1 = new java.sql.Date(65643563456634L);
     java.sql.Date date2 = (java.saql.Date)date1;
     
     //情况二:要放在数据可中
     Date date3 = new Date();
     java.aql.DAte date4 = new java.sq;.Date(date3.getTime());
     // 转化为毫秒数
     
     
}

四、java.test.SimpleDateFoemat类

1、说明

Date类的API不易于国际化,大部分被废弃了, java.text.SimpleDateFormat
类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

它允许进行

格式化:日期 --> 字符串(指定格式)、

解析:字符串 --> 日期

格式化:
SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern): 该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
public String format(Date date): 方法格式化时间对象date
解析:
public Date parse(String source): 从给定字符串的开始解析文本,以生成一个日期。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ThIOrCL9-1611074148215)(810CD647D26B419796C33B7D5F89F9B8)]

2、SimpleDateFormat的实例化
@Test
piblic void test(){
    //实例化
    SimpleDateFormat sdf = new SimpledateFormat();
    
    //格式化:日期 --> 字符串(指定格式)
    Date date = new Date();//util下的DAte类
    
    String format = sdf.format(date);
    System.out.println(fprmat);
    
    //解析:字符串 --> 日期
    String str = "19-12-18 上午11:43";//有格式要求(++API里面有++)
    //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
    就会抛异常
    Date date1 = sdf.parse(str);
    System.out.println(date1);
    
    //按照指定的方式格式化和解析:调用带参的构造器
    SimpleDateFormat sdf2 = new SimDateFormat("yyyy-MM-dd hh:mm:ss");
}
3、练习1:将字符串"2020-11-11"转化为java.sql.Date
@Test
    public void test() throws ParseException {
        String str = "2020-11-11";

        //实例化SimpleDateFormat
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        //转化成util.Date格式
        Date date = simpleDateFormat.parse(str);

        //转化为sql.Date格式  调用构造器
        java.sql.Date date2 = new java.sql.Date(date.getTime());
        System.out.println(date2);

    }
练习2 “三天打鱼两天晒网” 1990-01-01

总天数 % 5 ==1,2,3 打鱼

总天数 % 5 ==4,0 晒网

方式一: 用毫秒数计算(date2.gtTime() - date1.getTime() )(1天 = 10006060*24)+ 1

@Test
    public void test2() throws ParseException {
        String str1 = "1990-01-01";
        String str2 = "2020-09-08";

        //实例化SimpleDateFormat
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        //转化成util.Date格式
        Date date1 = simpleDateFormat.parse(str1);
        Date date2 = simpleDateFormat.parse(str2);

        long day = (date2.getTime() - date1.getTime())/(1000*60*60*24)+1;

        if(day%5==4||day%5==0){
            System.out.println("晒网");
        }else{
            System.out.println("打鱼");
        }
    }

方式二:老老实实算吧

五、java.util.Calender(日历)类(抽象类)

1、说明

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

  • 获取Calendar实例的方法
  • 使用Calendar.getInstance()方法
  • 调用它的子类GregorianCalendar的构造器。

一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想
要的时间信息。比如YEAR、 MONTH、 DAY_OF_WEEK、 HOUR_OF_DAY 、
MINUTE、 SECOND

  • public void set(int field,int value)
  • public void add(int field,int amount)
  • public final Date getTime()
  • public final void setTime(Date date)

注意:

  • 获取月份时: 一月是0,二月是1,以此类推, 12月是11
  • 获取星期时: 周日是1,周二是2 , 。 。。。周六是7
 @Test
    public void test(){
        //1、实例化
        //方式一:创建其子类(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();

        //常用方法
//      get()
        int day1 = calendar.get(Calendar.DAY_OF_MONTH);//这个月的第几天
        int day2 = calendar.get(Calendar.DAY_OF_YEAR);//这年的第几天

//      set()
        calendar.set(Calendar.DAY_OF_MONTH,22);
        //把 ”这个月的第几天“ 改成了 22 -- Calendar类的可变性

//      add()
        calendar.add(Calendar.DAY_OF_MONTH,3);
        //把 ”这个月的第几天“ 加 3天

//      getTime() :日历类 --> util.Date类
        Date date = calendar.getTime();

//      setTime() : util.Date类 --> 日历类
        Date date2 = new Date();
        calendar.setTime(date2);
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2P1TmEMp-1611074148217)(DCBC3C05913F4AE3877CF88BF4D5ED86)]

2、实例化

方式一:创建其子类(GregorianCalendar)的对象

方式二:调用其静态方法getInstance()

@Test
    public void test(){
        //1、实例化
        //方式一:创建其子类(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值