java.math.BigDecimal
BigDecimal bd = new BigDecimal("1.0");
add(BigDecimal bd) //加法运算
subtract(BigDecimal bd) //减法运算
multiply(BigDecimal bd) //乘法运算
divide(BigDecimal bd) //除法运算
divide(BigDecimal divisor)
有一个重载方法divide(BigDecimal divisor, int scale, int roundingMode)
用来除法解决结果为无限循环小数这样的情况scale
:指定精确到小数点后几位。roundingMode
:
BigDecimal.ROUND_HALF_UP
。package com.clown.classes.others;
import java.math.BigDecimal;
public class BigDecimalDemo01 {
public static void main(String[] args) {
System.out.println("================ Double ===============");
//用Double类型的浮点数直接进行运算 不精确
Double d1 = 1.0;
Double d2 = 0.9;
Double d3 = 1.4;
Double d4 = 0.5;
//例1:1.0-0.9 = ?
System.out.println(d1-d2); //0.09999999999999998
//例2:(1.4-0.5)/0.9 = ?
System.out.println((d3-d4)/d2); //0.9999999999999999
System.out.println("============== BigDecimal =============");
//BigDecimal,大的浮点数精确计算
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
BigDecimal bd3 = new BigDecimal("1.4");
BigDecimal bd4 = new BigDecimal("0.5");
BigDecimal bd5 = new BigDecimal("20");
BigDecimal bd6 = new BigDecimal("3");
//subtract(); 减法运算
BigDecimal r1 = bd1.subtract(bd2); //1.0-0.9
System.out.println(r1); //0.1
//add(); 加法运算
BigDecimal r2 = bd1.add(bd2); //1.0+0.9
System.out.println(r2); //1.9
//multiply(); 乘法运算
BigDecimal r3 = bd1.multiply(bd2); //1.0*0.9
System.out.println(r3); //0.90
//divide(); 除法运算
BigDecimal r4 = bd3.subtract(bd4).divide(bd2); //(1.4-0.5)/0.9
System.out.println(r4); //1
//divide(BigDecimal divisor, int scale, int roundingMode); 当结果为无限循环小数时使用 否则报错:ArithmeticException!!!
//参数释义: int scale:指定精确到小数点后几位 int roundingMode:指定小数部分的取舍模式,通常采用四舍五入的模式:BigDecimal.ROUND_HALF_UP
BigDecimal r5 = bd5.divide(bd6,2,BigDecimal.ROUND_HALF_UP); //20/3 保留2位小数,末位四舍五入
System.out.println(r5); //6.67
}
}
运行结果:
位置:java.util.Date
Date
表示特定的瞬间,精确到毫秒。Date
类中的大部分方法都已经被Calendar
类中的方法所取代。
时间单位
方法:
toString() //将此 Date对象转换为字符串的形式
toLocaleString() //将此 Date对象转换为在特定语言环境下的表示字符串 已过时
getTime() //返回自1970年1月1日以来,到由此 Date对象表示的世界标准时间的毫秒数
after() //判断此日期是否在指定日期之后
before() //判断此日期是否在指定日期之前
compareTo() //比较两个日期的顺序
equals() //比较两个日期是否相等
package com.clown.classes.others;
import java.util.Date;
public class DateDemo01 {
public static void main(String[] args) {
//创建 Date对象
//今天
Date date1 = new Date();
//toString(); 将此 Date对象转换为字符串的形式
System.out.println(date1.toString()); //Tue Jul 25 22:29:12 CST 2023
//toLocaleString(); 将此 Date对象转换为在特定语言环境下的表示字符串 已过时的方法
System.out.println(date1.toLocaleString()); //2023-7-25 22:29:12
//昨天
//getTime(); 返回自1970年1月1日以来,到由此 Date对象表示的世界标准时间的毫秒数 1970:UNIX元年
Date date2 = new Date(date1.getTime()-(24*60*60*1000)); //一天的毫秒数:24*60*60*1000
System.out.println(date2.toLocaleString()); //2023-7-24 22:29:12
//方法:
//after() && before(); 判断时间前后
//after(); 判断此日期是否在指定日期之后
boolean b1 = date1.after(date2);
System.out.println(b1); //true
//before(); 判断此日期是否在指定日期之前
boolean b2 = date1.before(date2);
System.out.println(b2); //false
//compareTo(); 比较两个日期的顺序 如果对象 Date等于此参数日期,则值为 0;如果对象 Date在此参数日期之前,则该值小于 0;如果对象 Date在此参数日期之后,则值大于0
int d1 = date1.compareTo(date2);
System.out.println(d1); //1
int d2 = date2.compareTo(date1);
System.out.println(d2); //-1
//equals(); 比较两个日期是否相等
boolean b3 = date1.equals(date2);
System.out.println(b3); //false
}
}
运行结果:
java.util.Calendar
Calendar
类提供了获取或设置各种日历字段的方法。protected Calendar ()
由于修饰符是protected
,所以无法直接创建该对象。
方法:
static Calendar getInstance() //使用默认时区和区域设置获取日历
void set(int year, int month, int date, int hourofday, int minute, int second) //设置日历的年、月、日、时、分、秒
int get(int field) //返回给定日历字段的值。字段比如年、月、日等
void setTime(Date date) //用给定的Date设置此日历的时间。 Date --> Calendar
Date getTime() //返回一个Date表示此对象Calendar的时间值。 Calendar --> Date
void add(int field, int amount) //按照日历的规则,将指定的时间量添加或减去给指定的日历字段
long getTimeInMillis() //以毫秒为单位返回该日历的时间值
int getActualMaximum(int field) //返回指定日历字段能取到的最大值
int getActualMinimum(int field) //返回指定日历字段能取到的最小值
package com.clown.classes.others;
import java.util.Calendar;
public class CalendarDemo01 {
public static void main(String[] args) {
//1. 创建Calendar对象 protected 不能使用new直接创建
//getInstance(); //使用默认时区和区域设置获取日历
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
//getTime(); 返回一个Date表示此对象Calendar的时间值。
System.out.println(calendar1.getTime().toLocaleString());
//getTimeInMillis(); 以毫秒为单位返回该日历的时间值 从1970年1月1日开始
System.out.println(calendar1.getTimeInMillis());
//2. 获取时间信息
//int get(int field); 返回给定日历字段的值。字段比如年、月、日等
//get(Calendar.YEAR); 获取年
int year = calendar1.get(Calendar.YEAR);
//get(Calendar.MONTH); 获取月 0-11
int month = calendar1.get(Calendar.MONTH);
//get(Calendar.DAY_OF_MONTH); 获取日
int day = calendar1.get(Calendar.DAY_OF_MONTH); //DATE
//get(Calendar.HOUR_OF_DAY); 获取时
int hour = calendar1.get(Calendar.HOUR_OF_DAY); //HOUR:12小时制 HOUR_OF_DAY:24小时制
//get(Calendar.MINUTE); 获取分
int minute = calendar1.get(Calendar.MINUTE);
//get(Calendar.SECOND); 获取秒
int second = calendar1.get(Calendar.SECOND);
//打印时间信息
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second); //月是 0-11,所以要 +1
//3. 修改时间
//用set()方法修改
//set(int field, int value); //设置日历的年、月、日、时、分、秒
calendar2.set(Calendar.DAY_OF_MONTH, 25); //将日修改为 25
//打印修改后的日期
System.out.println(calendar2.getTime().toLocaleString());
//用add()方法修改
//add(int field, int amount); 按照日历的规则,将指定的时间量添加或减去给指定的日历字段
calendar2.add(Calendar.HOUR_OF_DAY, -1); //将小时数 -1
//打印修改后的日期
System.out.println(calendar2.getTime().toLocaleString());
//4. 补充方法
//getActualMaximum(int field); 返回指定日历字段能取到的最大值
System.out.println(calendar2.getActualMaximum(Calendar.DAY_OF_MONTH));
//getActualMinimum(int field); 返回指定日历字段能取到的最小值
System.out.println(calendar2.getActualMinimum(Calendar.DAY_OF_MONTH));
}
}
运行结果:
java.text.SimpleDateFormat
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。字母 | 日期或时间 | 示例 |
---|---|---|
y | 年 | 2023 |
M | 年中月份 | 07 |
d | 月中天数 | 26 |
H | 1天中小时数(0-23) | 17 |
m | 分钟 | 28 |
s | 秒 | 53 |
S | 毫秒 | 387 |
package com.clown.classes.others;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo01 {
public static void main(String[] args) throws Exception {
//创建SimpleDateFormat对象 年:y, 月:M, 日:d, 时:H, 分:m, 秒:s
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
//创建Date对象
Date date = new Date();
//format(Date date); 将给定的Date成日期/时间字符串 格式化date (把日期转为字符串)
String str = sdf1.format(date);
//输出格式化之后的时间
System.out.println(str);
//parse(String source) throws ParseException; 从字符串中解析文本以产生一个Date (把字符串转为时间)
Date date2 = sdf2.parse("1990/05/01");
//输出解析之后的时间
System.out.println(date2);
}
}