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类和日期操作类的主要内容,如果未能解决你的问题,请参考以下文章