当前位置:首页学习笔记Java笔记3.8 常用API-包装类-时间API

3.8 常用API-包装类-时间API

常用API

toString类

3.8 常用API-包装类-时间API

阅读IDEA生成的Equals方法

3.8 常用API-包装类-时间API

Objects的常见方法

Objects类与Object还是继承关系,Objects类是从JDK1.7开始之后才有的

3.8 常用API-包装类-时间API

Math方法-数学类

3.8 常用API-包装类-时间API

System类

3.8 常用API-包装类-时间API
3.8 常用API-包装类-时间API

BigDecimal类-用于小数的运算

3.8 常用API-包装类-时间API
3.8 常用API-包装类-时间API

包装类

将基本数据类型,包装成类(变成引用数据类型)

好处:类中存在方法,可以调用方法来解决问题。

分类:

byte			Byte
short           Short
int             Integer		***
long            Long
float           Float
double          Double
boolean         Boolean
char            Character

创建对象

Integer类:
	1. 创建对象:
		JDK5版本之前:Integer i= new Integer(10);
		JDK5版本之后:Integer i= 10;

		* 自动装箱:将基本数据类型,自动的包装,变成引用数据类型。
			  原理:会自动调用Integer.valueOf()
                
        * 自动拆箱:将引用数据类型的包装类,转换为基本数据类型使用。
              原理:会自动调用对的 intValue() 方法,完成转换

        * 结论:基本数据类型,和对应的包装类,是可以直接混合运算的

面试题

3.8 常用API-包装类-时间API

标准答案:

3.8 常用API-包装类-时间API

对象中的方法

3.8 常用API-包装类-时间API

开发常用

3.8 常用API-包装类-时间API

时间API

3.8 常用API-包装类-时间API

JDK8版本之前和之后的对比

3.8 常用API-包装类-时间API

JDK8版本之前

Date类 :代表时间和日期

  1. 构造方法:

public Date() :将此刻的时间封装为对象

public Date(long time) :根据传入的毫秒值,封装时间对象

  1. 成员方法:

public void setTime(long time) :根据传入的毫秒值,封装时间对象

public long getTime() :获取时间原点,到时间对象所经历过的毫秒值

SimpleDateFormat 类 :日期格式化类

3.8 常用API-包装类-时间API
  1. 构造方法:

public SimpleDateFormat() :根据默认的格式,来格式化当前时间对象

public SimpleDateFormat(String s) :根据指定的模式,来格式化当前时间对象

  1. 成员方法:

public String format(Date d) :对传入的日期对象进行格式化操作,返回格式化好的字符串

public Date parse(String source) :对传入的日期字符串进行解析,解析为日期对象

Calendar类 :jdk1.1版本开始,取代Date类的

  1. 创建对象:

public static Calendar getInstance() :获取Calendar的对象

  1. 成员方法:

public int get(int field) :根据传入的字段(静态常量),获取指定的日历值

Calendar.YEAR :年

Calendar.MONTH :月(注意,Calendar类的设计者,将月份设计的是0~11,月份取出来应该+1)

Calendar.DAY_OF_MONTH :日

Calendar.DAY_OF_WEEK :星期(注意:星期取出之后需要查表)

Calendar.DAY_OF_YEAR :获取一年中的第几天

public void set(int year, int month, int date) :设置日期对象的年,月,日

public void set(int field, int value) :设置某一个字段

public abstract void add(int field, int amount) :修改某一个字段的偏移量

public static void main(string[]args) {
    //获取Calendar的对象
    Calendar c Calendar.getInstance();
    int year c.get(Calendar.YEAR);
    int month c.get(Calendar.MONTH);
    int day c.get(Calendar.DAY_OF_MONTH)
    int weekIndex c.get(Calendar.DAY_OF_WEEK);
    char[]weeks={' ', '日', '一', '二', '三', '四', '五', '六'};
    
    System.out.println(weeks[weekIndex]);
}

JDK8版本之后

3.8 常用API-包装类-时间API

JDK8版本后时间API的四大类

3.8 常用API-包装类-时间API

LocalDateTime类-用于获取本地时间和日期

3.8 常用API-包装类-时间API

LocalDateTime转换LocalDate, LocalTime

转换方法如下 :

  1. toLocalDate()
  2. toLocalTime()

获取年月日时分秒相关的方法

3.8 常用API-包装类-时间API

修改年月日时分秒相关的方法

3.8 常用API-包装类-时间API

DateTimeFormatter类-用于时间格式化和解析

3.8 常用API-包装类-时间API

用于时间的格式化和解析 :

1. 对象的获取 :

        static DateTimeFormatter ofPattern(格式) : 获取格式对象

2. 格式化 :

        String format(时间对象) : 按照指定方式格式化

3. 解析 :

        LocalDateTime.parse("解析字符串", 格式化对象);
        LocalDate.parse("解析字符串", 格式化对象);
        LocalTime.parse("解析字符串", 格式化对象);

代码演示 :

public static void main(String[] args) {

    LocalDateTime now = LocalDateTime.now();
    System.out.println("格式化之前:" + now);

    // 获取格式化对象
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
    // 格式化
    String result = formatter.format(now);
    System.out.println(result);
    // 解析
    String s = "2008年12月10日";
    LocalDate localDate = LocalDate.parse(s, formatter);
    System.out.println(localDate);
}

Instant类-用于表示时间的对象

Instant类常见方法 :

    static Instant now() : 获取当前时间的Instant对象(标准时间)
    static Instant ofXxxx(long epochMilli) : 根据(秒/毫秒/纳秒)获取Instant对象
    ZonedDateTime atZone(ZoneId zone) : 指定时区
    boolean isXxx(Instant otherInstant) : 判断系列的方法
    Instant minusXxx(long millisToSubtract) : 减少时间系列的方法
    Instant plusXxx(long millisToSubtract) : 增加时间系列的方法

代码演示 :

public static void main(String[] args) {
    // 获取当前时间的Instant对象(标准时间)
    Instant now = Instant.now();
    System.out.println("当前时间为(世界标准时间):" + now);
    System.out.println("------------------");

    // 根据(秒/毫秒/纳秒)获取Instant对象
    Instant instant1 = Instant.ofEpochMilli(1000);
    Instant instant2 = Instant.ofEpochSecond(5);

    System.out.println(instant1);
    System.out.println(instant2);
    System.out.println("------------------");

    // 指定时区
    ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault());
    System.out.println("带时区(系统默认)的时间" + zonedDateTime);
    System.out.println("------------------");

    // 判断系列的方法
    System.out.println(now.isBefore(instant1));
    System.out.println(now.isAfter(instant1));
    System.out.println("------------------");

    // 减少时间系列的方法
    System.out.println("减1000毫秒:" + now.minusMillis(1000));
    System.out.println("减5秒钟:" + now.minusSeconds(5));
    System.out.println("------------------");

    // 增加时间系列的方法
    System.out.println("加1000毫秒:" + now.plusMillis(1000));
    System.out.println("加5秒钟:" + now.plusSeconds(5));
    System.out.println("------------------");
}

Zoneld类-时区类

3.8 常用API-包装类-时间API

代码演示 :

public static void main(String[] args) {
    Set<String> set = ZoneId.getAvailableZoneIds();
    System.out.println(set);

    System.out.println("--------------------------");
    // 获取系统默认的时区
    ZoneId systemDefault = ZoneId.systemDefault();
    System.out.println(systemDefault);
    // 根据默认时区, 获取时间对象
    ZonedDateTime zonedDateTime = Instant.now().atZone(systemDefault);
    System.out.println(zonedDateTime);

    System.out.println("--------------------------");

    ZonedDateTime zonedDateTime1 = Instant.now().atZone(ZoneId.of("Africa/Nairobi"));
    System.out.println(zonedDateTime1);
}

ZoneDataTime-带时区的时间对象

    static ZonedDateTime now() : 获取当前时间的ZonedDateTime对象
    static ZonedDateTime ofXxxx(...) : 获取指定时间的ZonedDateTime对象
    ZonedDateTime withXxx(时间) : 修改时间系列的方法
    ZonedDateTime minusXxx(时间) : 减少时间系列的方法
    ZonedDateTime plusXxx(时间)  : 增加时间系列的方法

代码演示 :

public static void main(String[] args) {

    // 获取当前时间的ZonedDateTime对象
    ZonedDateTime now = ZonedDateTime.now();
    System.out.println(now);
    System.out.println("--------------------------");

    // 获取指定时间的ZonedDateTime对象
    ZonedDateTime of = ZonedDateTime.of
            (2008, 8, 8, 8, 8, 8, 8,
                    ZoneId.systemDefault());
    System.out.println(of);
    System.out.println("--------------------------");

    // 修改时间系列的方法
    System.out.println(now.withYear(2008));
    System.out.println(now.withMonth(8));
    System.out.println(now.withDayOfMonth(8));
    System.out.println("--------------------------");

    // 减少时间系列的方法
    System.out.println(now.minusYears(1));
    System.out.println(now.minusMonths(1));
    System.out.println(now.minusDays(1));
    System.out.println("--------------------------");

    // 增加时间系列的方法
    System.out.println(now.plusYears(1));
    System.out.println(now.plusMonths(1));
    System.out.println(now.plusDays(1));
}

Duration-用于计算日期间隔 (时分秒)

代码演示 :

import java.time.Duration;
import java.time.LocalDateTime;

/**
 * Duration计算日期间隔 (时分秒)
 */
public class DurationDemo {
    public static void main(String[] args) {
        // 此刻日期时间对象
        LocalDateTime today = LocalDateTime.now();
        System.out.println(today);

        // 昨天的日期时间对象
        LocalDateTime otherDate = LocalDateTime.of(2023, 5
                , 11, 0, 0, 0);

        System.out.println(otherDate);

        Duration duration = Duration.between(otherDate, today); // 第二个参数减第一个参数

        System.out.println(duration.toDays());                  // 两个时间差的天数
        System.out.println(duration.toHours());                 // 两个时间差的小时数
        System.out.println(duration.toMinutes());               // 两个时间差的分钟数
        System.out.println(duration.toMillis());                // 两个时间差的毫秒数
        System.out.println(duration.toNanos());                 // 两个时间差的纳秒数
    }
}

Period-用于计算日期间隔 (年月日)

代码演示 :

import java.time.LocalDate;
import java.time.Period;

/**
 * Period计算日期间隔 (年月日)
 */
public class PeriodDemo {
    public static void main(String[] args) {
        // 此刻年月日
        LocalDate today = LocalDate.now();
        System.out.println(today);

        // 昨天年月日
        LocalDate otherDate = LocalDate.of(2023, 3, 26);
        System.out.println(otherDate);

        //Period对象表示时间的间隔对象
        Period period = Period.between(today, otherDate);    // 第二个参数减第一个参数

        System.out.println(period.getYears());      // 间隔多少年
        System.out.println(period.getMonths());     // 间隔的月份
        System.out.println(period.getDays());       // 间隔的天数
        System.out.println(period.toTotalMonths()); // 总月份
    }
}

ChronoUnit-用于计算两个 “日期” 间隔

  • 详细介绍 : 可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位

代码演示 :

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

/**
 * ChronoUnit可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位
 */
public class ChronoUnitDemo {
    public static void main(String[] args) {
        // 本地日期时间对象:此刻的
        LocalDateTime today = LocalDateTime.now();
        System.out.println(today);

        // 昨天的时间
        LocalDateTime birthDate = LocalDateTime.of(2023, 5, 11,
                0, 0, 0);
        System.out.println(birthDate);

        System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));
        System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));
        System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));
        System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));
        System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));
        System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));
        System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));
        System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));
        System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));
        System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));
        System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));
        System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));
        System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));
        System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));
        System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));
    }
}

时间API的综合小练习

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

public class Test2 {
    /*
        需求: 键盘录入用户的生日, 程序计算出用户的年龄
     */
    public static void main(String[] args) {

        System.out.println("请输入您的出生日期: ");
        String birthday = new Scanner(System.in).nextLine();

        // 将生日字符串, 转换为时间对象
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
        LocalDate birthdayDate = LocalDate.parse(birthday, formatter);

        // 获取今天的时间
        LocalDate now = LocalDate.now();

        // 计算时间间隔
        long age = ChronoUnit.YEARS.between(birthdayDate, now);

        System.out.println("时间间隔为: " + age);
    }
}
温馨提示:

文章标题:3.8 常用API-包装类-时间API

文章链接:https://www.cutrui.cn/3110.html

更新时间:2023年08月08日

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Java笔记学习笔记

3.7 综合练习,石头迷阵游戏编写

2023-8-2 15:18:23

Java笔记潮流科技

Shiro权限控制入门

2024-11-27 14:08:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

你有新的私信

请务必要查看您的私信哟~~