Java中的Random类和日期操作类

Posted 周青灯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的Random类和日期操作类相关的知识,希望对你有一定的参考价值。

1、Random类

(1)Random类用于生成随机数。每当需要以任意或非系统方式生成数字时,可使用此类;

(2)Math类的random()方法也可以产生随机数,其实Math类的random()方法底层就是使用Random类实现的;

(3)Random类的构造方法有两种重载方式;

        构造方法 说明

                Random() 创建一个新的随机数生成器

                Random(long seed) 使用单个long种子创建一个新的随机数生成器
(4)Random类中定义了很多方法用于获取随机数,最常用的是nextInt()方法,它返回下一个伪随机数,返回值类型是整数类型。返回下一个伪随机数的语法格式如下:

        int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的int值。

        int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值n(不包括n)之间均匀分布的int值。

(5)Random类还定义了得到长整型、boolean型、浮点型等伪随机数的方法。

(6)如果用同样一个种子值来初始化两个Random对象,然后用每个对象调用相同的方法,那么得到的随机数也是相同的。

关于Random类的相关代码如下:

import java.util.Random;

public class RandomTest 
    public static void main(String[] args) 
        //创建Random类对象
        Random random = new Random();
        //调用不同的方法,获取不同类型的随机数
        boolean result1  =random.nextBoolean();
        System.out.println(result1);
        int result2 =random.nextInt();
        System.out.println(result2);
        //利用for循环,获取100个随机数
        for(int i =1;i<=100;i++)
            //随机数的范围在10以内
            int result3 =random.nextInt(10);
            System.out.print(result3+" ");
        
    

 2、日期操作类

(1)java.util包也是Java内置的一个工具包,它包含了集合框架、日期和时间、随机数生成器等各种实用工具类;

(2)java.util包不会默认导入,如果要使用该包中的类,则必须在程序的开始部分进行手工导入;

(3)java.util包中提供的和日期相关的类有Date类、Calendar类和SimpleDateFormat类等。

        1)Date类对象用来表示日期和时间,该类提供了一系列操作日期和时间各组成部分的方法。Date类中使用最多的是获取系统当前的日期和时间。

        举例:Date date = new Date();这句代码是使用系统当前时间创建日期对象。

        2)Calendar类也是用老操作日期和时间的类,它可以看作是Date类的一个增强版。Calendar类提供了一组方法,允许把一个以毫秒为单位的时间转换成年、月、日、小时、分、秒。

可以把Calendar类当做是万年历,默认显示的是当前时间,当然也可以查看其他时间。

        Calendar类是抽象类,可以通过静态方法getInstance()获得Calendar类的对象,其实这个获得的对象是它的子类的对象。

        Calendar类提供一些方法和静态字段来操作日历,例如:

        int get(int field):返回给定日历字段的值;其中YEAR:指示年;MONTH:指示月;DAY_OF_MONTH:指示一个月中的某天;DAY_OF_WEEK:指示一个星期中的某天。

        3)DateFormat类用来格式化日期和时间,它在java.text包下,是一个抽象类,提供了多种格式化和解析时间的方法。

        格式化是将日期转换成文本,解析是将文本转换成日期格式。使用比较多的是它的子类SimpleDateFormat类。

        SimpleDateFormat类是一个以语言环境有关的方式格式化和解析日期的具体类,如“yyyy-MM-dd HH:mm:ss”就是指定的一种日期和时间格式。

(4)在JDK 1.1之间,Date类允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的API不易于实现国际化。从JDK 1.1开始,使用Calendar类实现日趋和时间字段之间的转化,使用DataFormat类来格式化和解析日期字符串。

Date类的相关代码如下:

import java.util.Date;

public class DateTest 
    public static void main(String[] args) 
        //创建Date对象
        Date date = new Date();
        System.out.println("此时此刻是:"+date);
        //分别获取年 月 日 时 分 秒
       int year = date.getYear();
       int month = date.getMonth();
       int days = date.getDate();
       int hours = date.getHours();
       int minutes = date.getMinutes();
       int seconds =date.getSeconds();
       //获取星期,返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday)
       int day =date.getDay();
       String[] xingQi = "星期日","星期一","星期二","星期三","星期四","星期五","星期六";

        System.out.println(year+1900+"年"+(month+1)+"月"+days+"日"+" "+hours+":"+minutes+":"+seconds+" "+xingQi[day]);



    

Calendar类的相关代码如下:

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

public class CalendarTest 
    public static void main(String[] args) 
        //static Calendar getInstance()使用默认时区和语言环境获得一个日历。
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        //获取年 月 日 时 分 秒
        // int get(int field) 返回给定日历字段的值。
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);//年
        int month = calendar.get(Calendar.MONTH);
        System.out.println(month+1);//月
        int date = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(date);//日
        int hour=calendar.get(Calendar.HOUR_OF_DAY);//时
        int minute = calendar.get(Calendar.MINUTE);//分
        int second =calendar.get(Calendar.SECOND);//秒
        System.out.println(hour+":"+minute+":"+second);
        //输出今天是这一年的第几天
        System.out.println("今天是这一年的第"+calendar.get(Calendar.DAY_OF_YEAR)+"天");

        System.out.println("-----------------------");
        //获取当前主机时间并输出
        Date date2  =calendar.getTime();
        System.out.println(date2);
    

Math类和Random类

Math类

java.lang.Math提供了一系列静态方法用于科学计算, 其方法的参数和返回值类型一般都为double型, 如果需要更加强大的数学运算能力计算高等数学中的相关内容, 可使用apache commons下面的Math类库

Math类的常用方法:

abs取绝对值
acos, asin, atan, cos, sin, tan三角函数
sqrt平方根
pow(double a, double b), a^b
max(double a, double b), 取最大值
min(double a, double b), 取最小值
ceil(double a), 大于a的最小整数
floor(double a), 小于a的最大整数
random(), 返回0.0到1.0的随机数
long round(double a), double型数据a转换为long型(四舍五入)
toDegrees(double angrad), 弧度转换为角度
roRadians(double angdeg), 角度转换为弧度

/**************示例程序****************/
public static void main(String[] args) {
    // 取正相关操作
    System.out.println(Math.ceil(3.1));
    System.out.println(Math.floor(3.4));
    System.out.println(Math.round(3.1));
    System.out.println(Math.round(3.8));
    System.out.println("##########################");
    
    // 绝对值, 开方, a的b次幂相关操作
    System.out.println(Math.abs(-1));
    System.out.println(Math.abs(-1.1));
    System.out.println(Math.sqrt(36));
    System.out.println(Math.pow(2, 4));
    System.out.println("##########################");
    
    // Math类中常用的常量
    System.out.println(Math.PI);
    System.out.println(Math.E);
    System.out.println("##########################");
    
    // 随机数
    System.out.println(Math.random());
}

/*
4.0
3.0
3
4
##########################
1
1.1
6.0
16.0
##########################
3.141592653589793
2.718281828459045
##########################
0.02732034556476759
*/

Random类

Math类中虽然有产生随机数的方法Math.random(), 但是通常需要的随机数的范围并不是[0,1)之间的double类型数据, 这时就需要对其进行一些复杂的运算. 如果使用Math.random()计算过于复杂的话, 可以使用另一种方式得到随机数, 即Random类, 这个类是专门用来生成随机数, 并且Math.random()底层就是调用的Random类的nextDouble()方法

/******************示例程序*************************/
import java.util.Random;
public static void main(String[] args) {
    Random rand = new Random();
    
    // 随机生成[0,1)之间的double类型的数据
    System.out.println(rand.nextDouble());
    System.out.println("#########################");
    
    // 随机生成int类型允许范围之内的整型数据
    System.out.println(rand.nextInt());
    System.out.println("#########################");
    
    // 随机生成[0,1)之间的float类型数据
    System.out.println(rand.nextFloat());
    System.out.println("#########################");
    
    // 随机生成false或true
    System.out.println(rand.nextBoolean());
    System.out.println("#########################");
    
    // 随机生成[0,10)之间的int类型的数据
    System.out.println(rand.nextInt(10));
    System.out.println("#########################");
    
    // 随机生成[20,30)之间的int类型的数据
    System.out.println(rand.nextInt(10) + 20);
    System.out.println("#########################");
    
    // 随机生成[20,30)之间的int类型的数据(此种方法计算较为复杂)
    System.out.println((int)(rand.nextDouble() * 10) + 20);
    System.out.println("#########################");
}

/*
0.18579466820637747
#########################
1695590674
#########################
0.8908015
#########################
false
#########################
9
#########################
21
#########################
25
#########################
*/

以上是关于Java中的Random类和日期操作类的主要内容,如果未能解决你的问题,请参考以下文章

java中基类和超类的区别

Java中的引用类型Scanner类和随机类型Random

Java入门——Java API

Java常用类之Math类Random类和System类

大数据必学Java基础(四十九):Math类和Random类的讲解

Java 中的Scanner类 Random类 ArrayList类