Java进阶(五)常用API、Lambda、常见算法

五、常用API、Lambda、常见算法

需要学会什么:

  • 如何处理时间:在程序中经常需要处理时间、获取时间、时间判断、运算等。
  • 认识包装类:Java认为一切皆对象,8种基本类型不是,如何实现的,集合、泛型也不支持基本类型,怎么解决?
  • 正则表达式:程序中需要对各种信息进行格式合法性的校验,如手机号码,邮箱等。
  • 经常需要操作数组元素:如何快捷操作数组元素,如输出数组内容、排序、元素搜索等。排序和搜索算法是什么样的?
  • Lambda表达式:匿名内部类的代码是可以进一步的简化的,什么情况下可以简化,需要用什么知识完成?

1.日期与时间

a.Date

Date类概述:

  • Date类的对象在Java中代表的是当前所在系统的此刻日期时间。

Date的构造器:

名称

说明

public Date()

创建一个Date对象,代表的是系统当前此刻日期时间。

public Date(long time)

把时间毫秒值转化成Date日期对象。

Date的常用方法:

名称

说明

public long getTime()

获取时间对象的毫秒值。

public void setTime(long time)

设置日期对象的时间为当前时间毫秒值对应的时间。

Date类记录时间的2种形式:

  • 形式一:日期对象。

            Date date = new Date();
            System.out.println(date);
    
  • 形式二:时间毫秒值。

            Date date = new Date();
            long time = date.getTime();
            System.out.println(time);
    
            long time1 = System.currentTimeMillis();
            System.out.println(time1);
    

案例:请计算当前时间往后走1小时121秒之后的时间是多少。

Test.java

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        // 获取当前系统时间戳
        long current_date = System.currentTimeMillis();
        current_date += (60 * 60 + 121) * 1000;

        // 方式一:时间戳转化为日期类型
        Date date = new Date(current_date);
        System.out.println(date);

        // 方式二:将Date对象设置为表示 1970 年 1 月 1 日 00:00:00 GMT 之后的时间毫秒的时间点
        Date date1 = new Date();
        date1.setTime(current_date);
        System.out.println(date1);

    }
}

总结:

  1. 日期对象如何创建,如何获取时间毫秒值?

    • Date date = new Date();
    • Long time = date.getTime();
  2. 时间毫秒值怎么恢复成日期对象?

    Date date = new Date(time);
    date.setTime(time);
    
b.SimpleDateFormat

SimpleDateFormat类的作用:

  • 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。

  • 也可以把字符串的时间形式解析成日期对象。

    // 格式化
    // Date对象 ——》 2022年6月16日 17:00
    // 时间毫秒值 ——》 2022年6月16日 17:00

    // 解析
    // 2022年6月16日 17:00 ——》 Date对象

SimpleDateFormat的构造器:

构造器

说明

public SimpleDateFormat()

构造一个SimpleDateFormat,使用默认格式。

public SimpleDateFormats(String pattern)

构造一个SimpleDateFormat,使用指定的格式

SimpleDateFormat的格式化方法:

格式化方法

说明

public final String format(Date date)

将日期格式化成日期/时间字符串。

public final String format(Object time)

将时间毫秒值式化成日期/时间字符串。

格式化的时间形式的常用的模块对应关系如下:

2022-06-16 18:00:00 -> yyyy-MM-dd HH:mm:ss

2022年06月16日 18:00:00 -> yyyy年MM月dd日 HH:mm:ss

  • y:年
  • M:月
  • d:日
  • H:时
  • m:分
  • s:秒

Test.java

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

public class Test {
    public static void main(String[] args) {
        // 日期对象
        Date date = new Date();
        System.out.println(date);

        // 创建格式化日期对象
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
        // 格式化日期对象
        String rs = simpleDateFormat.format(date);
        System.out.println(rs);

        // 格式化时间毫秒值
        // 求121之后的时间
        long time = System.currentTimeMillis() + 121 * 1000;
        String rs1 = simpleDateFormat.format(time);
        System.out.println(rs1);

    }
}

SimpleDateFormat解析字符串时间成为日期对象:

解析方法

说明

public Date parse(String source)

从给定字符串的开始解析文本以生成日期。

案例:请计算出2022年06月16日19点10分10秒,往后走3天20小时50分30秒后的时间是多少。

Test.java

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

public class Test1 {
    public static void main(String[] args) throws ParseException {
        // 解析字符串时间
        // 案例:请计算出2022年06月16日19点10分10秒,往后走3天20小时50分30秒后的时间是多少
        String dateStr = "2022年06月16日 19:10:10";

        // 字符串时间解析成日期对象
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date = simpleDateFormat.parse(dateStr);

        // 往后走3天20小时50分30秒
        long time = date.getTime() + (3L * 24 * 60 * 60 + 20 * 60 * 60 + 50 * 60 + 30) * 1000;
        // 2022年06月20日 16:00:40
        System.out.println(simpleDateFormat.format(time));
    }
}

总结:

  1. SimpleDateFormat可以格式化哪些时间形式?

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    String rs1 = simpleDateFormat.format(date);
    String rs2 = simpleDateFormat.format(time);
    
  2. SimpleDateFormat如何进行字符串时间的解析?

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    Date date = simpleDateFormat.parse("2022-06-16 19:10:10")
    
案例:秒杀活动

需求:秒杀活动2022年6月18日 00:00:00 - 2022年6月18日 00:01:00

  • 小甲下单并付款的时间为:2022年6月18日 00:00:01
  • 小乙下单并付款的时间为:2022年6月18日 00:01:20
  • 用代码说明这两位同学有没有参加秒杀活动成功。

分析:

  • 判断下单时间是否在开始到结束的范围内。
  • 把字符串形式的时间变成毫秒值。

Test.java

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

public class Test {
    public static void main(String[] args) throws ParseException {
        // 需求:秒杀活动2022年6月18日 00:00:00 - 2022年6月18日 00:01:00
        //
        //- 小甲下单并付款的时间为:2022年6月18日 00:00:01
        //- 小乙下单并付款的时间为:2022年6月18日 00:01:20
        //- 用代码说明这两位同学有没有参加秒杀活动成功。

        // 创建SimpleDateFormat对象
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

        // 活动开始时间
        String startTime = "2022年6月18日 00:00:00";
        // 活动结束时间
        String endTime = "2022年6月18日 00:01:00";
        // 小甲参加活动时间
        String JiaJoinTime = "2022年6月18日 00:00:01";
        // 小乙参加活动时间
        String YiJoinTime = "2022年6月18日 00:01:20";

        // 转成Date对象
        Date startTimestamp = simpleDateFormat.parse(startTime);
        Date endTimeTimestamp = simpleDateFormat.parse(endTime);
        Date JiaJoinTimestamp = simpleDateFormat.parse(JiaJoinTime);
        Date YiJoinTimestamp = simpleDateFormat.parse(YiJoinTime);

        if (whetherSucceed(startTimestamp, endTimeTimestamp, JiaJoinTimestamp)) {
            System.out.println("小甲参加活动成功!");
        } else {
            System.out.println("小甲参加活动失败!");
        }

        if (whetherSucceed(startTimestamp, endTimeTimestamp, YiJoinTimestamp)) {
            System.out.println("小乙参加活动成功!");
        } else {
            System.out.println("小乙参加活动失败!");
        }

    }

    /**
     * 判断是否参加活动成功
     *
     * @param startTime 活动开始时间
     * @param endTime 活动结束时间
     * @param joinTime 参加活动时间
     * @return 是否参加活动成功
     */
    public static boolean whetherSucceed(Date startTime, Date endTime, Date joinTime) {
        return joinTime.after(startTime) && joinTime.before(endTime);
    }
}
c.Calendar

Calendar概述:

  • Calendar代表了系统此刻日期对应的日历对象。
  • Calendar是一个抽象类,不能直接创建对象。

Calendar日历类创建日历对象的方法:

方法名

说明

public static Calendar getInstance()

获取当前日历对象。

Calendar常用方法:

方法名

说明

public int get(int field)

取日期中的某个字段信息。

public void set(int field, int value)

修改日历的某个字段信息。

public void add(int field, int amount)

为某个字段增加/减少指定的值。

public final Date getTime()

拿到此刻日期对象。

public long getTimeInMillis()

拿到此刻时间毫秒值。

注意:Calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。

Test.java

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

public class Test {
    public static void main(String[] args) {
        // | 方法名                                 | 说明                          |
        // | public int get(int field)              | 取日期中的某个字段信息。      |
        // | public void set(int field, int value)  | 修改日历的某个字段信息。      |
        // | public void add(int field, int amount) | 为某个字段增加/减少指定的值。 |
        // | public final Date getTime()            | 拿到此刻日期对象。            |
        // | public long getTimeInMillis()          | 拿到此刻时间毫秒值。          |

        /* 获取日历对象 */
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);

        /* 获取日期中的某个字段信息 */
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year + "年");

        // 月份从0开始计算
        int month = calendar.get(Calendar.MONTH) + 1;
        System.out.println(month + "月");

        int day = calendar.get(Calendar.DATE);
        System.out.println(day + "日");

        // 今天是一年中的第几天
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println("第" + dayOfYear + "天");

        /* 修改日历的某个字段信息 */
        // 修改当前日历对象的时间
        calendar.set(Calendar.HOUR, 19);
        System.out.println(calendar.get(Calendar.HOUR));

        /* 为某个字段增加/减少指定的值 */
        // 64天后的日期
        calendar.add(Calendar.DAY_OF_YEAR, 64);

        /* 拿到此刻日期对象 */
        Date date = calendar.getTime();
        System.out.println(date);

        /* 拿到此刻时间毫秒值 */
        long time = calendar.getTimeInMillis();
        System.out.println(time);
    }
}

总结:

  1. Calendar如何去得到日历对象的?

    // 获取当前日历对象
    public static Calendar getInstance()
    

2.JDK8新增日期类

a.概述、LocalTme/LocalDate/LocalDateTime
Ⅰ.概述
  • 从Java8开始,java.time包提供了新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值