一、日期类 Date Calendar
1.当前日期
Date date = new Date();
System.out.println(date);
2.时间戳 1970 1月1号 00:00:00 到当前时间的毫秒数
long time = date.getTime(); //1665303862926
3.将时间戳转换为Date对象
date = new Date(1000); //Thu Jan 01 08:00:01 CST 1970
4.获取年份
(方法名上有删除线,该方法已经被废弃,有新的方法替换了它,现在还可以用,将来可能会无法使用)
年份 加上 1900 才是真实的年份
int year = date.getYear() + 1900; //(122 + 1900 = 2022)
月份 从0开始计数
int month = date.getMonth() + 1; //9 + 1 = 10
日期
int day = date.getDate(); //9
星期
int week = date.getDay(); //0 星期天
时
int hour = date.getHours(); //16
分
int minutes = date.getMinutes(); //45
秒
int seconds = date.getSeconds(); //10
时区偏移量 当前时区时间 - 标准时区时间
int timezone = date.getTimezoneOffset(); //-480 -东八区 +西
5.可以通过set设置年月日时分秒 会自动进位
date.setMonth(12);
System.out.println(date); //Mon Jan 09 16:52:01 CST 2023
比较两个日期 返回值 1代表调用方法的日期更靠后;-1 参数的日期更靠后;0 就代表日期相等
date.compareTo(anotherDate);
返回值为true调用方法的日期在参数日期之前;否则就是在之后
date.before(when);
6.日期的格式化类
6.1 将Date对象转换为指定格式的字符串
6.2 将指定格式的日期字符串转换为Date对象
参数为格式 提供了日期的格式化符,将格式化符会显示成时间相关的信息;非格式化符会原样显示
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 'a' hh:mm:ss.SSS E D z"); //"yyyy年MM月dd日 'a' hh:mm:ss.SSS E D"
//日期转字符串
String date_str = sdf.format(date);
System.out.println(date_str); //2022-10-09 a 05:12:06.035 星期日 282
//字符串转换为日期 字符串的形式必须和format指定的形式一致
sdf = new SimpleDateFormat("yyyy-MM-dd");
date_str = "1998-07-01";
date = sdf.parse(date_str);
System.out.println(date); //Wed Jul 01 00:00:00 CST 1998
7.BigDecimal
7.1 BigDecimal(用来对超过16位有效位的数进行精确的运算,可精确至小数点后55位)
参数推荐使用字符串,不会改变小数的大小
BigDecimal decimal = new BigDecimal(0.1); //0.10000000000000000555......
decimal = new BigDecimal("0.1"); //0.1
将BigDecimal对象转换为数字类型
double a = decimal.intValue(); //(转成字符串)
Double b = a;
decimal.byteValue();
decimal.shortValue();
decimal.longValue();
decimal.floatValue();
decimal.doubleValue();
包装类之间 不能像基本数据类型一样,发生隐式转换
Integer a = 10;
Double d = a; //这个会报错 因为Integer并不是Double的子类
Double e = 10; //这个也会报错 10会自动装箱为Integer类型
7.2 BigDecimal的四则运算
BigDecimal d1 = new BigDecimal("0.1");
BigDecimal d2 = new BigDecimal("0.2");
BigDecimal result = d1.add(d2); //0.3
result = d1.subtract(d2); //-0.1
result = d1.multiply(d2); //0.02
result = d1.divide(d2); //0.5
BigDecimal的比较大小
返回值为1 代表d1大于d2;0 d1 == d2;-1 d1 < d2;
d1.compareTo(d2); //(compareTo皆comparable接口)
7.3 BigDecimal精确度的设置
小数位保留10位,位数不够,低位补零
MathContext mc = new MathContext(10);
decimal = new BigDecimal(0.1235,mc);
设置精确度,如果decimal的位数超过了设置的精确位数,就需要指定进位方式
decimal.setScale(3); //报错
保留n位小数,将该数字先乘以10的n次幂,先通过Math对应的方法计算出结果,再除以10的n次幂就是最终的结果
ROUND_UP/ROUND_CEILING:向上取整
ROUND_DOWN/ROUND_FLOOR:向下取整
ROUND_HALF_UP:四舍五入
ROUND_HALF_DOWN:小数位 大于0.5时就向上取整;否则向下取整
ROUND_HALF_EVEN:找离该数字最近的整数,如果一样近时,取偶数
decimal = decimal.setScale(3, BigDecimal.ROUND_UP);
System.out.println(decimal); //向上取整 0.124
// 0.12351 * 1000 = 123.51 0.51>0.5 = 124 / 1000 = 0.124
8.DecimalFormat
NumberFormat:多用于货币场景
9.Calendar
使用Calendar的静态方法getInstance()实例化对象
Calendar c = Calendar.getInstance();
c.setTime();
c.setTimeInMillis();
c.setTimeZone();