0
点赞
收藏
分享

微信扫一扫

Java数字处理和日期类

一、Math类的常用方法

Java 中的 +、-、*、/ 和 % 等基本算术运算符不能进行更复杂的数学运算,例如,三角函数、对数运算、指数运算等。于是 Java 提供了 Math 工具类来完成这些复杂的运算。
在 Java 中 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等。Math 类位于 java.lang 包,它的构造方法是 private 的,因此无法创建 Math 类的对象,并且 Math 类中的所有方法都是类方法,可以直接通过类名来调用它们。

1.1.静态常量

Math 类中包含 E 和 PI 两个静态常量,正如它们名字所暗示的,它们的值分别等于 e(自然对数)和 π(圆周率)。案例如下:调用 Math 类的 E 和 PI 两个常量,并将结果输出。代码如下:

public class Test01 {
    public static void main(String[] args) {
        System.out.println("常量E的值为:"+Math.E);
        System.out.println("常量PI的值为:"+Math.PI);
    }
}

执行上述代码,输出结果如下:

  • 常量E的值为:2.718281828459045
  • 常量PI的值为:3.141592653589793

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

在程序中常见的就是求最大值、最小值和绝对值问题,如果使用 Math 类提供的方法很便捷,如下:

方法

含义

static int abs(int a)

返回 a 的绝对值

static long abs(long a)

返回 a 的绝对值

static float abs(float a)

返回 a 的绝对值

static double abs(double a)

返回 a 的绝对值

static int max(int x,int y)

返回 x 和 y 中的最大值

static double max(double x,double y)

返回 x 和 y 中的最大值

static long max(long x,long y)

返回 x 和 y 中的最大值

static float max(float x,float y)

返回 x 和 y 中的最大值

static int min(int x,int y)

返回 x 和 y 中的最小值

static long min(long x,long y)

返回 x 和 y 中的最小值

static double min(double x,double y)

返回 x 和 y 中的最小值

static float min(float x,float y)

返回 x 和 y 中的最小值

案例:求 5 和 120 的较大值、3.14 和 2.12 的较小值、-2 的绝对值,代码如下:

public class Test01 {
    public static void main(String[] args) {

        System.out.println("求 5 和 120 的较大值:"+Math.max(2,120));
        System.out.println("求 3.14 和 2.12 的较小值:"+Math.min(3.14,2.12));
        System.out.println("求 -2 的绝对值:"+Math.abs(-2));
    }
}

代码执行后,结果如下:

  • 求 5 和 120 的较大值:120
  • 求 3.14 和 2.12 的较小值:2.12
  • 求 -2 的绝对值:2

1.3.求整运算

Math 类的求整方法有很多

方法

说明

static double ceil(double a)

返回大于或等于 a 的最小整数

static double floor(double a)

返回小于或等于 a 的最大整数

static double rint(double a)

返回最接近 a 的整数值,如果有两个同样接近的整数,则结果取偶数

static int round(float a)

将参数加上 1/2 后返回与参数最近的整数

static long round(double a)

将参数加上 1/2 后返回与参数最近的整数,然后强制转换为长整型

Math 类中取整函数方法的应用:

public class Test01 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入数字:");
        double num = scanner.nextDouble();


        System.out.println("大于或者等于"+num+"的最小整数:"+Math.ceil(num));
        System.out.println("小于或者等于"+num+"的最大整数:"+Math.floor(num));
        System.out.println("将"+num+"加上0.5之后最接近的整数"+Math.round(num));
        System.out.println("将"+num+"的整数"+Math.rint(num));
    }
}

代码执行如下:

  • 大于或者等于3.1415926的最小整数:4.0
  • 小于或者等于3.1415926的最大整数:3.0
  • 将3.1415926加上0.5之后最接近的整数3
  • 将3.1415926的整数3.0

1.4.三角函数运算

Math 类中包含的三角函数方法及其说明如下:

方法

说明

static double sin(double a)

返回角的三角正弦值,参数以孤度为单位

static double cos(double a)

返回角的三角余弦值,参数以孤度为单位

static double asin(double a)

返回一个值的反正弦值,参数域在 [-1,1],值域在 [-PI/2,PI/2]

static double acos(double a)

返回一个值的反余弦值,参数域在 [-1,1],值域在 [0.0,PI]

static double tan(double a)

返回角的三角正切值,参数以弧度为单位

static double atan(double a)

返回一个值的反正切值,值域在 [-PI/2,PI/2]

static double toDegrees(double angrad)

将用孤度表示的角转换为近似相等的用角度表示的角

staticdouble toRadians(double angdeg)

将用角度表示的角转换为近似相等的用弧度表示的角

上面每个方法的参数和返回值都是 double 类型,参数以弧度代替角度来实现,其中 1 度等于 π/180 弧度,因此平角就是 π 弧度。

public class Test01 {
    public static void main(String[] args) {
        System.out.println("90度的正弦值:"+Math.sin(Math.PI/2));
        System.out.println("0度的余弦值:"+Math.cos(0));
        System.out.println("1的反正切值:"+Math.atan(1));
        System.out.println("120度的弧度值:"+Math.toRadians(120.0));
    }
}

代码执行结果如:

  • 90度的正弦值:1.0
  • 0度的余弦值:1.0
  • 1的反正切值:0.7853981633974483
  • 120度的弧度值:2.0943951023931953

1.5.指数运算

指数的运算包括求方根、取对数及其求 n 次方的运算。在 Math 类中定义的指数运算方法及其说明如下:

 

方法

说明

static double exp(double a)

返回 e 的 a 次幂

static double pow(double a,double b)

返回以 a 为底数,以 b 为指数的幂值

static double sqrt(double a)

返回 a 的平方根

static double cbrt(double a)

返回 a 的立方根

static double log(double a)

返回 a 的自然对数,即 lna 的值

static double log10(double a)

返回以 10 为底 a 的对数

使用 Math 类中的方法实现指数的运算,main() 方法中的代码如下:

public class Test01 {
    public static void main(String[] args) {
        System.out.println("4的立方值:"+Math.pow(4,3));
        System.out.println("16的平方根:"+Math.sqrt(16));
        System.out.println("10的底2的对数:"+Math.log10(2));
    }
}

代码执行如下:

  • 4的立方值:64.0
  • 16的平方根:4.0
  • 10的底2的对数:0.3010299956639812

二、java生成随机数(random()和Random类)

在 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 类提供的所有方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的概率是均等的,

方法

说明

boolean nextBoolean()

生成一个随机的 boolean 值,生成 true 和 false 的值概率相等

double nextDouble()

生成一个随机的 double 值,数值介于 [0,1.0),含 0 而不包含 1.0

int nextlnt()

生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果

需要生成指定区间的 int 值,则需要进行一定的数学变换

int nextlnt(int n)

生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成

指定区间的 int 值,也需要进行一定的数学变换

void setSeed(long seed)

重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象

和相同种子数使用 new 关键字创建出的 Random 对象相同

long nextLong()

返回一个随机长整型数字

boolean nextBoolean()

返回一个随机布尔型值

float nextFloat()

返回一个随机浮点型数字

double nextDouble()

返回一个随机双精度值

案例如下:

public class Test02 {
    public static void main(String[] args) {
        Random random = new Random();

        double d1 = random.nextDouble();//生成区间[0,1.0]内的小数
        double d2 = random.nextDouble() * 7; //生成区间[0,7.0]内的小数

        int i1 = random.nextInt(10);//生成[0,10]区间的整数
        int i2 = random.nextInt(18)-3;//生成[-3,15]区间的整数

        long l1 = random.nextLong();//生成一个随机长整型值
        boolean b1 = random.nextBoolean();//生成一个随机布尔值
        float f1 = random.nextFloat();//生成一个随机浮点型值
        System.out.println("生成的[0,1.0]区间的小数是:" + d1);
        System.out.println("生成的[0,7.0]区间的小数是:" + d2);
        System.out.println("生成的[0,10]区间的整数是:" + i1);
        System.out.println("生成的[-3,15]区间的整数是:" + i2);
        System.out.println("生成一个随机长整型值:" + l1);
        System.out.println("生成一个随机布尔型值:" + b1);
        System.out.println("生成一个随机浮点型值:" + f1);
        
    }
}

代码执行后结果如下:

  • 生成的[0,1.0]区间的小数是:0.3615695314305458
  • 生成的[0,7.0]区间的小数是:4.019759738132422
  • 生成的[0,10]区间的整数是:4
  • 生成的[-3,15]区间的整数是:10
  • 生成一个随机长整型值:-3205734793834935172
  • 生成一个随机布尔型值:true
  • 生成一个随机浮点型值:0.09433818

三、Java数字格式化

数字的格式在解决实际问题时使用非常普遍,这时可以使用 DedmalFormat 类对结果进行格式化处理。例如,将小数位统一成 2 位,不足 2 位的以 0 补齐。
DecimalFormat 是 NumberFormat 的一个子类,用于格式化十进制数字。DecimalFormat 类包含一个模式和一组符号,常用符号的说明如下:

符号

说明

0

显示数字,如果位数不够则补 0

#

显示数字,如果位数不够不发生变化

.

小数分隔符

-

减号

,

组分隔符

E

分隔科学记数法中的尾数和小数

%

前缀或后缀,乘以 100 后作为百分比显示

?

乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替;

如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符

DecimalFormat 类将数字转换成各种格式,案例如下:

public class Test03 {
    public static void main(String[] args) {
        //实例化DecimalFormat类的对象,指定格式
        DecimalFormat df1 = new DecimalFormat("0.0");
        DecimalFormat df2 = new DecimalFormat("#.#");
        DecimalFormat df3 = new DecimalFormat("000.000");
        DecimalFormat df4 = new DecimalFormat("###.###");

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个float类型的数字:");
        float f = scanner.nextFloat();
        
        //对输入的数字使用格式
        System.out.println("0.0 格式:"+df1.format(f));
        System.out.println("#.# 格式:"+df2.format(f));
        System.out.println("000.000 格式:"+df3.format(f));
        System.out.println("###.### 格式:"+df4.format(f));
    }
}

代码执行结果如下:

Java数字处理和日期类_构造方法

四、Java时间日期的处理:Java Date类、Calendar类

在 Java 中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar

4.1.Date 类

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

4.1.1. 构造方法

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

  • Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。
  • Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。

这两个构造方法的使用示例如下:

public class Test04 {
    public static void main(String[] args) {
        Date d1 = new Date();//调用无参构造器
        System.out.println(d1);//Wed May 31 14:36:45 CST 2023

        Date d2 = new Date(60000);//调用含有一个龙类型参数的有参构造器
        System.out.println(d2); //输出Thu Jan 01 08:01:00 CST 1970
    }
}

注意:

  • Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。
  • Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。 因此距离 1970 年 1 月 1 日 00:00:00 CST 一分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。

4.1.2. 常用方法

Date 类提供了许多与日期和事件相关的方法,如下:

方法

描述

boolean after(Date when)

判断此日期是否在指定日期之后

boolean before(Date when)

判断此日期是否在指定日期之前

int compareTo(Date anotherDate)

比较两个日期的顺序

boolean equals(Object obj)

比较两个日期的相等性

long getTime()

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数

String toString()

把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。

其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)


案例代码如下:

public class Test04 {
    public static void main(String[] args) {
        Date date = new Date();
        long time = date.getTime();
        System.out.println("返回自 1970 年 1 月 1 日 00:00:00 GMT 以来到现在度过的秒数:"+time);

        Date d1 = new Date(2018, 11, 12);
        Date d2 = new Date(2015, 12, 12);

        boolean after = d1.after(d2);
        System.out.println("判断d1是否在d2指定日期之后:"+after);//true

        boolean before = d1.before(d2);
        System.out.println("判断d1是否在d2指定日期之前:"+before);//false

        int i = d1.compareTo(d2);
        System.out.println("比较d1和d2两个日期的顺序:"+i);//返回1或者-1,这里返回-1

        boolean equals = d1.equals(d2);
        System.out.println("比较d1和d2两个日期的是否相等:"+equals);

    }
}

执行后结果如下:

  • 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来到现在度过的秒数:1685517952883
  • 判断d1是否在d2指定日期之后:true
  • 判断d1是否在d2指定日期之前:false
  • 比较d1和d2两个日期的顺序:1
  • 比较d1和d2两个日期的是否相等:false

4.2.Calendar 类

Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。
创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

Calendar calendar = Calendar.getInstance();

当创建了一个 Calendar 对象后,就可以通过 Calendar 对象中的一些方法来处理日期、时间。Calendar 类的常用方法如表 2 所示。

方法

描述

void add(int field, int amount)

根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount

boolean after(Object when)

判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果

boolean before(Object when)

判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果

void clear()

清空 Calendar 中的日期时间值

int compareTo(Calendar anotherCalendar)

比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日

00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0

int get(int field)

返回指定日历字段的值

int getActualMaximum(int field)

返回指定日历字段可能拥有的最大值

int getActualMinimum(int field)

返回指定日历字段可能拥有的最小值

int getFirstDayOfWeek()

获取一星期的第一天。根据不同的国家地区,返回不同的值

static Calendar getInstance()

使用默认时区和语言坏境获得一个日历

static Calendar getInstance(TimeZone zone)

使用指定时区和默认语言环境获得一个日历

static Calendar getInstance(TimeZone zone,

Locale aLocale)

使用指定时区和语言环境获得一个日历

Date getTime()

返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时

00 分 00 秒至现在的毫秒偏移量)的 Date 对象

long getTimeInMillis()

返回此 Calendar 的时间值,以毫秒为单位

void set(int field, int value)

为指定的日历字段设置给定值

void set(int year, int month, int date)

设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

void set(int year, int month, int date, int hourOfDay,

int minute, int second)

设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值

void setFirstDayOfWeek(int value)

设置一星期的第一天是哪一天

void setTimeInMillis(long millis)

用给定的 long 值设置此 Calendar 的当前时间值

Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。
Calendar 类中定义了许多常量,分别表示不同的意义。

  • Calendar.YEAR:年份。
  • Calendar.MONTH:月份。
  • Calendar.DATE:日期。
  • Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
  • Calendar.HOUR:12小时制的小时。
  • Calendar.HOUR_OF_DAY:24 小时制的小时。
  • Calendar.MINUTE:分钟。
  • Calendar.SECOND:秒。
  • Calendar.DAY_OF_WEEK:星期几。

例如,获取当前年、月、日可用如下代码:

public class Test05 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        //获取年份
        System.out.println(calendar.get(Calendar.YEAR));

        //获取月份
        System.out.println(calendar.get(Calendar.MONTH));

        //获取日期
        System.out.println(calendar.get(Calendar.DATE));
    }
}

如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。

使用 Calendar 类处理日期时间的实例如下:

public class Test05 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();

        calendar.setTime(new Date());//将当前系统时间赋值给Calendar对象

        System.out.println("现在时间:"+calendar.getTime());//获取当前时间

        int year = calendar.get(calendar.YEAR);//获取年份
        System.out.println("年份是:"+year);

        int month = calendar.get(calendar.MONTH);//获取月份
        System.out.println("月份是:"+month);

        int data = calendar.get(calendar.DATE);//获取日
        System.out.println("日是:"+data);

        int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;//获取今天星期几(星期日为第一天)
        System.out.println(week);

        int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时数(24 小时制)
        System.out.print(hour + "时");

        int minute = calendar.get(Calendar.MINUTE); // 获取当前分钟
        System.out.print(minute + "分");

        int second = calendar.get(Calendar.SECOND); // 获取当前秒数
        System.out.print(second + "秒");

        int millisecond = calendar.get(Calendar.MILLISECOND); // 获取毫秒数
        System.out.print(millisecond + "毫秒");

        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
        System.out.println("今天是本月的第 " + dayOfMonth + " 天");

        int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); // 获取今天是本月第几周
        System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");

        int many = calendar.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
        System.out.println("今天是今年第 " + many + " 天");

        Calendar c = Calendar.getInstance();
        c.set(2022, 8, 8); // 设置年月日,时分秒将默认采用当前值
        System.out.println("设置日期为 2022-8-8 后的时间:" + c.getTime()); // 输出时间
    }
}

五、Java日期格式化(DateFormat类和SimpleDateFormat类)

格式化日期表示将日期/时间格式转换为预先定义的日期/时间格式。例如将日期“Fri May 18 15:46:24 CST2018” 格式转换为 “2018-5-18 15:46:24 星期五”的格式。
在 Java 中,可以使用 DateFormat 类和 SimpleDateFormat 类来格式化日期,下面详细介绍这两个格式化日期类的使用。

5.1.DateFormat 类

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期→文本)、解析(文本→日期)和标准化日期。
在创建 DateFormat 对象时不能使用 new 关键字,而应该使用 DateFormat 类中的静态方法 getDateInstance(),示例代码如下:

DateFormat df = DateFormat.getDatelnstance();

在创建一个 DateFormat 对象后,可以调用该对象中的方法来对日期/时间进行格式化。DateFormat 类中常用方法如下:

方法

描述

String format(Date date)

将 Date 格式化日期/时间字符串

Calendar getCalendar()

获取与此日期/时间格式相关联的日历

static DateFormat getDateInstance()

获取具有默认格式化风格和默认语言环境的日期格式

static DateFormat getDateInstance(int style)

获取具有指定格式化风格和默认语言环境的日期格式

static DateFormat getDateInstance(int style,

Locale locale)

获取具有指定格式化风格和指定语言环境的日期格式

static DateFormat getDateTimeInstance()

获取具有默认格式化风格和默认语言环境的日期/时间

格式

static DateFormat getDateTimeInstance(int

dateStyle,int timeStyle)

获取具有指定日期/时间格式化风格和默认语言环境的

日期/时间格式

static DateFormat getDateTimeInstance(int

dateStyle,int timeStyle,Locale locale)

获取具有指定日期/时间格式化风格和指定语言环境的

日期/时间格式

static DateFormat getTimeInstance()

获取具有默认格式化风格和默认语言环境的时间格式

static DateFormat getTimeInstance(int style)

获取具有指定格式化风格和默认语言环境的时间格式

static DateFormat getTimeInstance(int style,

Locale locale)

获取具有指定格式化风格和指定语言环境的时间格式

void setCalendar(Calendar newCalendar)

为此格式设置日历

Date parse(String source)

将给定的字符串解析成日期/时间

格式化样式主要通过 DateFormat 常量设置。将不同的常量传入到表 1 所示的方法中,以控制结果的长度。DateFormat 类的常量如下。

  • SHORT:完全为数字,如 12.5.10 或 5:30pm。
  • MEDIUM:较长,如 May 10,2016。
  • LONG:更长,如 May 12,2019 或 11:15:32am。
  • FULL:是完全指定,如 Tuesday、May 10、2018 AD 或 11:l5:42am CST。

public class Test06 {
    public static void main(String[] args) {
        //获取不同格式化风格和中国的时间日期
        DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
        DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
        DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
        DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);

        //将不同格式化风格的时间格式化为时间字符串
        String format1 = df1.format(new Date());
        String format2 = df2.format(new Date());
        String format3 = df3.format(new Date());
        String format4 = df4.format(new Date());

        //输出日期
        System.out.println("SHORT:"+format1); //23-5-31
        System.out.println("MEDIUM:"+format2);//2023-5-31
        System.out.println("LONG:"+format3);//2023年5月31日
        System.out.println("FULL:"+format4);//2023年5月31日 星期三

    }
}

输出结果如下:

  • SHORT:23-5-31
  • MEDIUM:2023-5-31
  • LONG:2023年5月31日
  • FULL:2023年5月31日 星期三

5.2.SimpleDateFormat 类

如果使用 DateFormat 类格式化日期/时间并不能满足要求,那么就需要使用 DateFormat 类的子类——SimpleDateFormat。
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类,它允许进行格式化(日期→文本)、解析(文本→日期)和规范化。SimpleDateFormat 使得可以选择任何用户定义的日期/时间格式的模式。
SimpleDateFormat 类主要有如下 3 种构造方法。

  • SimpleDateFormat():用默认的格式和默认的语言环境构造 SimpleDateFormat。
  • SimpleDateFormat(String pattern):用指定的格式和默认的语言环境构造 SimpleDateF ormat。
  • SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的语言环境构造 SimpleDateF ormat。

SimpleDateFormat 自定义格式中常用的字母及含义如下:

 

字母

含义

示例

y

年份。一般用 yy 表示两位年份,yyyy 表示 4 位年份

使用 yy 表示的年扮,如 11;

使用 yyyy 表示的年份,如 2011

M

月份。一般用 MM 表示月份,如果使用 MMM,则会

根据语言环境显示不同语言的月份

使用 MM 表示的月份,如 05;

使用 MMM 表示月份,在 Locale.CHINA

语言环境下,如“十月”;在 Locale.US

语言环境下,如 Oct

d

月份中的天数。一般用 dd 表示天数

使用 dd 表示的天数,如 10

D

年份中的天数。表示当天是当年的第几天, 用 D 表示

使用 D 表示的年份中的天数,如 295

E

星期几。用 E 表示,会根据语言环境的不同, 显示不

同语言的星期几

使用 E 表示星期几,在 Locale.CHINA 语

言环境下,如“星期四”;在 Locale.US 语

言环境下,如 Thu

H

一天中的小时数(0~23)。一般用 HH 表示小时数

使用 HH 表示的小时数,如 18

h

一天中的小时数(1~12)。一般使用 hh 表示小时数

使用 hh 表示的小时数,如 10 (注意 10 有

可能是 10 点,也可能是 22 点)

m

分钟数。一般使用 mm 表示分钟数

使用 mm 表示的分钟数,如 29

s

秒数。一般使用 ss 表示秒数

使用 ss 表示的秒数,如 38

S

毫秒数。一般使用 SSS 表示毫秒数

使用 SSS 表示的毫秒数,如 156


 案例如下:

public class Test07 {
    public static void main(String[] args) {
        Date date = new Date();//创建一个Date对象,获取当前时间
        //指定格式。然后进行格式化处理
        SimpleDateFormat f = new SimpleDateFormat("今天是"+"yyyy 年 MM 月 dd 日 HH点 mm 分 ss 秒");
        System.out.println(f.format(date));
    }
}



举报

相关推荐

0 条评论