数字和日期处理

Table of Contents

在解决实际问题时,对数字和日期的处理是非常普遍的,如数学问题、随机数问题和日期问题等。为了解决这些问题,Java 提供了处理相关问题的类,包括 Math 类、Random 类、BigInteger 类、Date 类等。

Math 类的常用方法

在 Java 中 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等。Math 类位于 java.lang 包,它的构造方法是 private 的,因此无法创建 Math 类的对象,并且 Math 类中的所有方法都是类方法,可以直接通过类名来调用它们。

1. 静态常量

Math 类中包含 EPI 两个静态常量,分别等于 e (自然对数)和 π (圆周率)。

2. 求最大值、最小值和绝对值

1: public class Test02 {
2:     public static void main(String[] args) {
3:         System.out.println("10 和 20 的较大值:" + Math.max(10, 20));     // → 20
4:         System.out.println("15.6 和 15 的较小值:" + Math.min(15.6, 15)); // → 15.0
5:         System.out.println("-12 的绝对值:" + Math.abs(-12));             // → 12
6:     }
7: }

3. 求整运算

4. 三角函数运算

5. 指数运算

生成随机数

在 Java 中要生成一个指定范围之内的随机数字在两种方法:

  • 一种是调用 Math 类的 random() 方法;
  • 一种是作用 Random 类。

Random 类提供了丰富的随机数生成方法,可以产生 boolean、int、long、float、byte 数组 以及 double 类型的随机数,这是它与 random() 方法最大的不同之处。 random() 方法只能产生 double 类型的 0~1 的随机数。

Random 类位于 java.util 包中,该类常用的有如两个构造方法:

  • Random() :该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造 Random 对象;
  • Random(long seed) :使用单个 long 类型的参数创建一个新的随机数生成器。

Random 类提供的所有方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的概率是均等的。

 1: import java.util.Random;
 2: 
 3: public class Test06 {
 4:     public static void main(String[] args) {
 5:         Random r = new Random();
 6:         double d1 = r.nextDouble();       // 生成[0,1.0]区间的小数
 7:         double d2 = r.nextDouble() * 7;   // 生成[0,7.0]区间的小数
 8:         int i1 = r.nextInt(10);           // 生成[0,10]区间的整数
 9:         int i2 = r.nextInt(18) - 3;       // 生成[-3,15]区间的整数
10:         long l1 = r.nextLong();           // 生成一个随机长整型值
11:         boolean b1 = r.nextBoolean();     // 生成一个随机布尔型值
12:         float f1 = r.nextFloat();         // 生成一个随机浮点型值
13:     }
14: }

Math 类的 random() 方法没有参数,它默认会返回大于等于 0.0 、小于 1.0 的 double 类型随机数,对返回的数字稍加处理,即可实现产生任意范围随机数的功能。

TODO 数字格式化

时间日期的处理

在 Java 中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar 类完成。其中,Date 类主要封装了系统的日期和时间信息,Calendar 类则会根据系统的日历来解释 Date 对象。

Date 类

Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是 星期、月、日、小时、分、秒、年

Date 类有如下两个构造方法:

  • Date() :此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间;
  • Date(long date) :此种形式从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
1: Date date1 = new Date();              // 调用无参数构造函数
2: System.out.println(date1.toString()); // 输出:Wed May 18 21:24:40 CST 2016
3: Date date2 = new Date(60000);         // 调用含有一个long类型参数的构造函数
4: System.out.println(date2);            // 输出:Thu Jan 0108:01:00 CST 1970

*注:GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。

TODO Calendar 类

Date: 2020-09-18 Fri 17:13

Author: Jack Liu

Created: 2020-09-18 Fri 18:44

Validate