Java必备基础八——Math类、Random类、日期时间类

本文介绍了Java中Math类的常用方法,包括随机数、最大值、最小值和绝对值等,并展示了如何生成指定范围内的随机整数。接着讲解了Random类的构造和获取不同数据类型随机数的方法。最后,详细阐述了Date、Calendar以及SimpleDateFormat类在日期时间处理中的应用,包括日期格式化和日期时间的加减操作。
摘要由CSDN通过智能技术生成

前言

Java类库中有许多实用的类库,主要了解下面一些常用类库。

一、Math类

Math类中提供了许多静态方法,可直接调用,调用形式如:

Math.数学方法

Math类主要有以下几个常用方法。

1.随机数方法

  • random()方法:用于产生一个double型随机数字,范围在[0.0,1.0)之间。
  • 举例:根据用户提供的两个整数参数返回两个参数之间的任意整数
public class Example4_9 {
    public static void main(String[] args) {
        int small = Integer.parseInt(args[0]);//将输入的字符串转化为整型
        int big = Integer.parseInt(args[1]);//将输入的整数字符串转化为中整型
        if (small > big) {//保证small存小值,big存大值
            int temp = small;
            small = big;
            big = temp;
        }
        int r = (int) Math.random() * (big-small) + small;//强制转换的格式:(类型名)表达式
        System.out.println(r);//使用快捷键sout
    }
}

2.最大值、最小值、绝对值方法

  • 方法名
max(a,b); //求a、b两者最大
min(a,b); //求a、b两者最小
abs(a); //求a的绝对值
  • 以上3个方法的参数类型可以是多种数值类型
  • 应用
public class Example4_9 {
    public static void main(String[] args) {
        int small = Integer.parseInt(args[0]);//将输入的字符串转化为整型
        int big = Integer.parseInt(args[1]);//将输入的整数字符串转化为中整型

        if (small > big) {//保证small存小值,big存大值
            int temp = small;
            small = big;
            big = temp;

        }
        int r = (int) Math.random() * (big-small) + small;//强制转换的格式:(类型名)表达式
        System.out.println(r);
        System.out.println(Math.max(small,big));//最大
        System.out.println(Math.min(small,big));//最小
        System.out.println(Math.abs(small-big));//绝对值
    }
}

输入1,2,输出:

1
2
1
1

3.取整数方法

  • 方法名
double ceil(double a);//返回大于等于参数a的最小整数
double floor(double a);//返回小于等于参数a的最大整数
double rint(double a);//返回与参数a最接近的整数,偶数优先

4.指数方法

  • 方法名
double exp(double a);//返回e的a次方
double sqrt(double a);//返回a的平方根
double pow(double a,double b);//返回a的b次方

二、Random类

1.Random类的两种构造方法

  • 定义:Random类在java.util包中,在指定的范围内随机产生数字
  • 构造方法:
Random(long seed); //有参构造,如果传入的数据相同,不同对象可产生相同的随机数
Random(); //无参构造,对于每次对象创建的随机数不同

2.Random类的常用方法

前面的Math类中的random()方法只产生double型的随机数,而在Radom类中提供多种方法获取不同数据类型的随机数,具体可查看API文档,已多次推荐,非常好用,适合新手。
举个例子说明方法:

public class Example4_11 {
    public static void main(String[] args) {
        Random r1 = new Random();//使用无参构造对象
        System.out.println(r1.nextFloat());//产生0.0~1.0间的float类型的值
        System.out.println(r1.nextDouble());//产生0.0~1.0间的double类型的值
        System.out.println(r1.nextInt());//产生0.0~1.0间的int类型的值
        System.out.println(r1.nextInt(10));//产生[0,10)间的int类型的值
        Random r2 = new Random(6);//使用有参构造对象,若参数相同,产生随机数相同
        Random r3 = new Random(6);//使用有参构造对象,若参数相同,产生随机数相同
        System.out.println(r2.nextInt() == r3.nextInt());
    }
}

输出:

0.0070629716
0.9097006612923648
-1061980360
0
true

三、日期时间类

java.util类中:Date类和Calendar类,用来处理日期、时间等操作。

1.Date类

  • Date类是Java中表示表示特定时间的类,精确到毫秒
  • Date类的构造方法:
public Date(); //根据当前的默认毫秒值创建日期对象
public Date(long date);//根据给定的毫秒值创建日期对象,date从1970年1月1日起的毫秒数
  • Date类的成员方法:
public long getTime();//获取时间,以毫秒为单位,获取的毫秒值是从1970年上午8时到当前经过的毫秒值
public void setTime(long time);//设置时间

2.SimpleDateFormat类

  • SimpleDateFormat类是DateFormat类的子类,可用来完成日期和文本之间的转换, 即把系统时间转化为不同的格式的字符串输出到界面,通常与Date类、Calendar类搭配使用,格式有如:
<item>yyyy-MM-dd HH:mm:ss.SSS</item> //1970-01-01 08:00:00.000
<item>yyyy/MM/dd HH:mm:ss.SSS</item> //1970/01/01 08:00:00.000
<item>MM-dd-yyyy HH:mm:ss.SSS</item> //01-01-1970 08:00:00.000
<item>MM/dd/yyyy HH:mm:ss.SSS</item> //01/01/1970 08:00:00.000
<item>dd-MM-yyyy HH:mm:ss.SSS</item> //01-01-1970 08:00:00.000
<item>dd/MM/yyyy HH:mm:ss.SSS</item> //01-01-1970 08:00:00.000
  • SimpleDateFormat类的构造方法:
SimpleDateFormat(String pattern);//用给定的模式和默认语言环境的日期格式构造格式对象
  • SimpleDateFormat类的成员方法
String format(Date date);//将一个Date格式转化为日期时间字符串
Date parse(String source) throws ParseException;//从给定字符串开始解析文本生成一个日期
  • 用法:按照指定格式输出当前日期
public class Example4_12 {
    public static void main(String[] args){
        //转换日期时间格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date date = new Date();//获取当前系统日期毫秒数
        String str = simpleDateFormat.format(date);//将当前日期转换为字符串格式样的字符串
        
        System.out.println(str);//输出此类数字
        System.out.println(date);//输出真实时间
        
        try {
            date = simpleDateFormat.parse("2000-12-12 12:12:12:120");//将给定的字符串解析为日期样式
        } catch (ParseException e) {
        }
        System.out.println(date);//输出字符串被解析后的日期
}

输出结果:

2021-07-23 10:42:29.268
Fri Jul 23 10:42:29 CST 2021
Fri Jul 23 10:42:29 CST 2021

3.Calendar类

  • 定义:抽象类,获取日期和时间时考虑了时区问题
  • 抽象类不能被实例化,需要调用静态方法getInstance()来创建Calendar对象后才能调用其它该类的其它方法:
Calendar calendar = Calendar.getInstance(); //创建一个代表系统当前日期的Calendar 对象
  • 类变量:
Calendar.YEAR; //年
Calendar.MONTH; //月 ,从0开始
Calendar.DAY_OF_MONTH; //日
Calendar.HOUR; //小时
Calendar.MINUTE; //分钟
Calendar.SECOND; //秒
Calendar.MILLISECOND; //毫秒	
  • 成员方法:
    成员方法中的field参数一般是Calendar类的字段
public void set(int year, int month, int date); // 设置Calendar对象的年月日时分秒字段
public void set(int field, int value); //给指定的Calendar字段赋值
public void get(int field); //返回给定日历的值
abstract public void add(int field, int amount); //给给定字段添加或减去指定的时间量

4.GregorianCalendar类

  • 定义:是Calendar类的一个子类,提供世界大多数国家使用的标准日历系统,继承自Calendar类
  • 实例化对象语法如下:
GregorianCalendar gregorianCalendar = new GregorianCalendar(); //创建一个代表当前日期的GregorianCalendar对象
  • Calendar类以及GregorianCalendar类用法示例

  • 用法:

/**
 * @Author: qp
 * @Time: 2021/7/22 21:07
 * @Description
 */
public class Example4_12 {
    public static void main(String[] args) {     
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR,2020);
        calendar.add(Calendar.YEAR,1);
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH));//从0开始,7月份输出数字6
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        calendar.set(2021,6,23,14,10,00);//设置当前时间为2021-7-23 14:10:00
        System.out.println(calendar.getTime());//获取设置的系统时间,精确到秒
        GregorianCalendar gregorianCalendar = new GregorianCalendar(2021,6,23);
        System.out.println(gregorianCalendar.getTime());//获取设置系统时间,精确到秒
        int year = gregorianCalendar.get(GregorianCalendar.YEAR);
        System.out.println(year+"是闰年吗?"+gregorianCalendar.isLeapYear(year));//判断当前系统年份是否是闰年
    }
}
   

输出结果为:

2021
6
23
Fri Jul 23 14:10:00 CST 2021
Fri Jul 23 00:00:00 CST 2021
2021是闰年吗?false

5.其它时间类

  • 定义:Java8中新增了一个Java.time包,该包中包含更多的时间操作类

  • 常用时间操作类:
    请添加图片描述

  • 用法

/**
 * @Author: qp
 * @Time: 2021/7/23 14:46
 * @Description
 */
public class Example4_13 {
    public static void main(String[] args) {
        //获取当前Clock
        Clock clock = Clock.systemUTC();
        System.out.println("获取的标准时间" + clock.instant());
        System.out.println("获取到的毫秒数" + clock.millis());
        //Duration
        Duration duration = Duration.ofDays(1);
        System.out.println("一天有" + duration.toHours() + "小时");
        System.out.println("一天有" + duration.toMinutes() + "分钟");
        //LocalDate
        LocalDate localDate = LocalDate.now();
        System.out.println("当前日期是:" + localDate);
        //LocalTime
        LocalTime localTime = LocalTime.now();
        System.out.println("当前时间是:" + localTime);//精确到毫秒
        //LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前时间是:" + localDateTime);//精确到毫秒
        //当前日期时间加上1天1小时10分
        LocalDateTime localDateTime1 = localDateTime.plusDays(1).plusHours(1).plusMinutes(10);
        System.out.println("当前日期时间加上1天1小时10分" + localDateTime1);
        //获取年份、月份、月份和日期
        System.out.println("当前年份:" + Year.now());
        System.out.println("当前月份:" + Month.JULY);
        System.out.println("当前月份和日期:" + MonthDay.now());
        //DayOfWeek
        System.out.println(DayOfWeek.MONDAY);
        System.out.println(DayOfWeek.THURSDAY);
        //ZoneId
        ZoneId zoneId=ZoneId.systemDefault();
        System.out.println("当前时区是"+zoneId);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值