java基础学习十四之BigDecimal类与常用日期时间类
学习基础编程语言如Java或JavaScript #生活技巧# #工作学习技巧# #数字技能训练#
1.BigDecimal
简述:
BigDecimal类处理高精度计算
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作
1.1.BigDecimal类的常用的几个构造方法: BigDecimal(int):将int表示形式转换为BigDecimal对象BigDecimal(String) :将字符串表示形式转换为BigDecimal对象(浮点数尽量使用字符串重载方法,别问为什么)BigDecimal(double):将double表示形式转换为BigDecimal对象 1.2.BigDecimal类的常用方法: add(BigDecimal):BigDecimal对象中的值相加,返回BigDecimal对象subtract(BigDecimal):BigDecimal对象中的值相减,返回BigDecimal对象multiply(BigDecimal):BigDecimal对象中的值相乘,返回BigDecimal对象divide(BigDecimal):BigDecimal对象中的值相除,返回BigDecimal对象(商为无限小数时需要使用它的重载方法传入保留几位小数,和保留方式(如:四舍五入))toString():将BigDecimal对象中的值转换成字符串doubleValue():将BigDecimal对象中的值转换成双精度数floatValue():将BigDecimal对象中的值转换成单精度数longValue():将BigDecimal对象中的值转换成长整数intValue():将BigDecimal对象中的值转换成整数 1.3.保留方式: BigDecimal.ROUND_HALF_UP表示四舍五入,BigDecimal.ROUND_HALF_DOWN也是五舍六入,BigDecimal.ROUND_UP表示进位处理(就是直接加1),BigDecimal.ROUND_DOWN表示直接去掉尾数。代码演示:
package com.qianfeng.cl;
import java.math.BigDecimal;
public class DemoBigDecimal {
public static void main(String[] args) {
BigDecimal big1 = new BigDecimal("1.0");
BigDecimal big2 = new BigDecimal("0.9");
BigDecimal big3 = big1.add(big2);
System.out.println(big3.doubleValue());
System.out.println(big1.subtract(big2));
System.out.println(big1.multiply(big2));
System.out.println(big1.divide(big2,2,BigDecimal.ROUND_HALF_UP));
BigDecimal a = new BigDecimal (45);
BigDecimal b = new BigDecimal (78);
if(a.compareTo(b) == -1){
System.out.println("a小于b");
}
if(a.compareTo(b) == 0){
System.out.println("a等于b");
}
if(a.compareTo(b) == 1){
System.out.println("a大于b");
}
if(a.compareTo(b) > -1){
System.out.println("a大于等于b");
}
if(a.compareTo(b) < 1){
System.out.println("a小于等于b");
}
BigDecimal big4 = new BigDecimal("1024.1234").setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(big4);
}
}
运行结果如下:
2.日期时间常用类
2.1 统一概念:标准时间
UTC(Universal Time Coordinated),即协调世界时。全世界统一的世界标准时间。需要不规则加入闰秒。GMT(Greenwich Mean Tim),格林尼治平均时间。一般认为UTC和GMT是相等的,但是会存在0.9秒以内的误差,这是由于地球不规则自转引起的。时区
本地时间,UTC+时区。东为正西为负。比如北京时间在东八区就是 UTC+(+0800)。DST,夏令时。是指夏天太阳升起比较早,将时钟拨快一个小时来提早日光的使用。欧美主要国家都引用了这个做法。如果在夏令时时区内 DST=UTC+时区+1。
时间戳
1900.01.01 00:00:00
Unix时间(戳),表示当前时间到1970年1月1日00:00:00 UTC对应的秒数。
时间戳,示当前时间到1970年1月1日00:00:00 UTC对应的毫秒数。
java中可使用System.currentTimeMillis()或者其他方法获得
2.2 Date和SimpleDateFormat java.util.Date类:表示特定的瞬间,精确到毫秒。SimpleDateFormat类:将显示的日期信息格式化代码演示:
package com.qianfeng.cl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DemoDate {
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println(date);
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date2 = simpleDate.format(date);
System.out.println(date2);
Date date3 = simpleDate.parse("1970-01-01 00:00:00");
System.out.println(date3);
}
}
运行结果如下:
2.3 CalendarCalendar类(日历)是一个抽象基类,主要用于完成日期字段之间相互操作的功能。
代码演示:
package com.qianfeng.cl;
import java.util.Calendar;
import java.util.Date;
public class DemoCalendar {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH)+1);
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
System.out.println(calendar.getTime());
calendar.setTime(new Date());
System.out.println(calendar.getTimeInMillis());
}
}
运行结果如下:
日期类之间的互转:
JDk 8 中表示日期和时间的类有多个如下:
Instant :它代表的是时间戳,表示时刻,不直接对应年月日信息,需要通过时区转换LocalDateTime:表示与时区无关的日期和时间信息,不直接对应时刻,需要通过时区转换LocalDate :表示与时区无关的日期,与LocalDateTime相比,只有日期信息,没有时间信息LocalTime :表示与时区无关的时间,与LocalDateTime相比,只有时间信息,没有日期信息ZonedDateTime :表示特定时区的日期和时间ZoneId/ZoneOffset :表示时区1.LocalDate转Date
LocalDate nowLocalDate = LocalDate.now();
Date date =
Date.from(localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
2.LocalDateTime转Date
LocalDateTime localDateTime = LocalDateTime.now();
Date date =
Date.from(localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant());
3.Date转LocalDateTime(LocalDate)
Date date =newDate();
LocalDateTime localDateTime =
date.toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
LocalDate localDate =
date.toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDate();
4.LocalDate转时间戳
LocalDate localDate = LocalDate.now();
longtimestamp =
localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
5.LocalDateTime转时间戳
LocalDateTime localDateTime = LocalDateTime.now();
longtimestamp = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
6.时间戳转LocalDateTime(LocalDate)
longtimestamp = System.currentTimeMillis();
LocalDate localDate =
Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
LocalDateTime localDateTime =
Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
网址:java基础学习十四之BigDecimal类与常用日期时间类 https://www.yuejiaxmz.com/news/view/504034
相关内容
Java实现电子钱包系统:从基础架构到安全支付的全面指南A =Java基础与源码
Java 零基础入门学习(小白也能看懂!)
【Java】基础类型之float(八)
重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」
Java基础与入门教程,解锁百度网盘中的宝藏资源
基础加强学习总结之反射
Java基于app的学生任务和时间规划(开题+源码)
java基础
基于java的家教系统设计与实现