1. BigDecimal
用于解决浮点型运算时,出现精度丢失的问题。
public static void main(String[] args) {
// 浮点型运算时, 直接+ - * / 可能会出现进度丢失问题
System.out.println(0.1 + 0.2);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);
}

BigDecimal的常见构造方法、常用方法
|
构造器 |
说明 |
|
public BigDecimal(double val) 注意:不推荐使用这个 |
将 double转换为 BigDecimal |
|
public BigDecimal(String val) |
把String转成BigDecimal |
|
方法名 |
说明 |
|
public BigDecimal add(BigDecimal b) |
加法 |
|
public BigDecimal subtract(BigDecimal b) |
减法 |
|
public BigDecimal multiply(BigDecimal b) |
乘法 |
|
public BigDecimal divide(BigDecimal b) |
除法 |
|
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) |
除法、可以控制精确到小数几位 |
2. 日期处理
2.1. 关于时间相关的概念
全世界的时间,需要有一个统一的计算标准
2.1.1. GMT(格林尼治标准时间):
- GMT是基于地球的自转和对恒星的观测来定义的时间标准。
- 它以英国伦敦郊区的格林尼治天文台为参考点,当太阳在每年的某一天通过格林尼治子午线的时刻为中午12点。
- GMT曾经是国际上主要的时间标准,但由于它是基于地球自转,而地球自转速度会有微小的变化,因此GMT并不是一个非常精确的时间标准。
2.1.2. UTC(协调世界时):
- UTC是基于原子时钟的测量,这些原子时钟的精度非常高,几乎不受环境因素影响。
- UTC由国际时间标准组织维护,并且会通过增加或减少闰秒来校正地球自转速度的微小变化,以保持与GMT接近的一致性。
- UTC是当前国际上最广泛使用的时间标准,被用于全球的时间服务、互联网、航空和其他许多领域。
总的来说,GMT是一个更传统的时间标准,而UTC是一个更现代、更精确的时间标准。在大多数实际应用中,尤其是需要高精度时间的情况下,UTC是首选的时间标准。在日常生活中,两者之间的差异通常很小,经常可以互换使用。


2.2. Date
Java给我们提供的一个时间类,用来描述时间,精确到毫秒.
|
构造方法 |
说明 |
|
public Date() |
代表的是系统当前时间。 |
|
public Date(long time) |
代表的是指定时间毫秒值。 |
|
常见方法 |
说明 |
|
public long getTime() |
返回从1970年1月1日 00:00:00走到此刻的总的毫秒数 |
|
public void setTime(long time) |
设置Date对象的时间为指定毫秒值 |
需求1:打印时间原点开始一年之后的时间
2.3. SimpleDateFormat

2.3.1. 作用
- 可以用来把Date对象格式化成我们想要的形式。

- 可以用来把字符串时间解析成Date对象。

2022-09-27 字符串 -----> Date对象
相关API
|
常见构造方法 |
说明 |
|
public SimpleDateFormat(String pattern) |
创建简单日期格式化对象,并封装指定的模式 |
|
常用方法 |
说明 |
|
public final String format(Date date) |
将Date对象格式化成字符串 |
|
public Date parse(String source) |
把字符串表示时间解析成Date对象 |
时间模式的常见符号:
- y 年
- M 月
- d 日
- H 时
- m 分
- s 秒
2020-11-11 13:27:06 == yyyy-MM-dd HH:mm:ss
2020年11月11日 13:27:06 == yyyy年MM月dd日 HH:mm:ss
2.4. Calendar
Calendar
- 代表的是系统此刻时间对应的日历。
- 通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
Calendar日历类的常见方法
|
方法名 |
说明 |
|
public static Calendar getInstance() |
获取当前日历对象 |
|
public final Date getTime() |
将Calendar转换成Date |
|
public final void setTime(Date date) |
将Date转换成Calendar |
|
public int get(int field) |
获取日历中的某个信息 |
|
public void set(int field,int value) |
修改日历的某个信息 |
|
public void add(int field,int amount) |
为某个信息增加/减少指定的值 |
注意:Calendar是一个抽象类,我们不能直接new来创建对象。
public static Calendar getInstance() : 获取当前日历对象
3. JDK8新增的时间类型
参考案例二的代码,如果需要根据字符串创建出来指定的日期格式,在进行比较,会非常复杂,在这个基础上,JDK8新推出了时间类型,可以简化操作,同时解决多线程数据安全的问题。


ZoneId
|
方法名 |
说明 |
|
static Set<String> getAvailableZoneIds() |
获取Java中支持的所有时区 |
|
static ZoneId systemDefault() |
获取系统默认时区 |
|
static ZoneId of(String zoneId) |
获取一个指定时区 |
Instant
|
方法名 |
说明 |
|
static Instant now() |
获取当前时间的Instant对象(标准时间) |
|
static Instant ofXxxx(long epochMilli) |
根据(秒/毫秒/纳秒)获取Instant对象 |
|
ZonedDateTime atZone(ZoneId zone) |
指定时区 |
|
boolean isXxx(Instant otherInstant) |
判断系列的方法 |
|
Instant minusXxx(long millisToSubtract) |
减少时间系列的方法 |
|
Instant plusXxx(long millisToSubtract) |
增加时间系列的方法 |
ZonedDateTime
|
方法名 |
说明 |
|
static ZonedDateTime now() |
获取当前时间的ZonedDateTime对象 |
|
static ZonedDateTime ofXxxx(。。。) |
获取指定时间的ZonedDateTime对象 |
|
ZonedDateTime withXxx(时间) |
修改时间系列的方法 |
|
ZonedDateTime minusXxx(时间) |
减少时间系列的方法 |
|
ZonedDateTime plusXxx(时间) |
增加时间系列的方法 |
DateTimeFormatter
|
方法名 |
说明 |
|
static DateTimeFormatter ofPattern(格式) |
获取格式对象 |
|
String format(时间对象) |
按照指定方式格式化 |
LocalDate\LocalTime\LocalDateTime
|
方法名 |
说明 |
|
static XXX now() |
获取当前时间的对象 |
|
static XXX of(。。。) |
获取指定时间的对象 |
|
get开头的方法 |
获取日历中的年、月、日、时、分、秒等信息 |
|
isBefore, isAfter |
比较两个 LocalDate |
|
with开头的 |
修改时间系列的方法 |
|
minus开头的 |
减少时间系列的方法 |
|
plus开头的 |
增加时间系列的方法 |

|
方法名 |
说明 |
|
public LocalDate toLocalDate() |
LocalDateTime转换成一个LocalDate对象 |
|
public LocalTime toLocalTime() |
LocalDateTime转换成一个LocalTime对象 |
- Period侧重于计算年月日的间隔
- Duration侧重于秒和纳秒的间隔
- ChronoUnit适用于所有,推荐使用
665

被折叠的 条评论
为什么被折叠?



