Chapter8 常用类(下)
8.2 JDK8之前的日期时间API
1. java.lang.System
类
currentTimeMillis()
方法:
时间戳,返回当前时间与1970.1.1,0:0:0之间的时间差,单位为毫秒
2. java.util.Date
类
- 构造器
Date()
:无参构造器,获取本地当前时间Date d = new Date();
Date(long date)
:创建指定毫秒数的date对象
- 方法
toString()
:将date转换为可读模式:Wed Oct 28 23:50:55 CST 2020getTime()
时间戳,返回当前对象与1970.1.1相差的毫秒数
3. java.sql.Date
类
- 数据库中的日期变量类型,
java.util.Date
类的子类 - 转换:利用
getTime()
方法Date date1 = new Date(); java.sql.Date date2 = new java.sql.Date(date1.getTime());
4. java.text.SimpleDateFormat
类
对Date
类的格式化和解析
- 默认空参构造器
Date date = new Date();//创建日期类 SimpleDateFormat sdf = new SimpleDateFormat();// 实例化该类 // 1. 字符串-->日期 String format = sdf.format(date); // 2020/10/29 下午3:47 // 2. 日期-->字符串 String str = "2020/10/29 下午3:48"; //只能是这种格式 Date date1 = sdf.parse(str);
- 自定义格式
使用有参数的构造器,可以自定义输入格式Date date = new Date();//创建日期类 SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd hh:mm:ss");// 实例化该类,参数自定义 // 1. 字符串-->日期 String format = sdf.format(date); // 2020-10-29 03:52:52 // 2. 日期-->字符串 String str = "2020/10/29 下午3:48"; //只能是这种格式 Date date1 = sdf.parse("2021-10-29 03:52:52"); //要使用对应格式
5. java.util.Calendar
类
抽象类
- 实例化——两种方式
- 创建其子类(GregorianCalendar)的对象
- 调用其静态方法getInstance():
Calendar calendar = Claendar.getInstance()
- 常用方法
get()
: 获取日期、时间等:Calendar calendar = Calendar.getInstance(); int days = calendar.get(Calendar.DAY_OF_MONTH);
set()
:修改···calendar.set(Calendar.DAY_OF_MONTH,22);
add()
增加calendar.add(Calendar.DAY_OF_MONTH,15);
getTime()
:用于与Date
类转换Date date = calendar.getTime();
setTime()
:Date date = new Date(); calendar.setTime()date;
- 注意事项
- 获取月份时,一月是0,二月是1;
- 获取星期时,周日是1,周一是2;
8.3 JDK8中新日期时间API
1. localDate
、localTime
、localDateTime
类
- 实例化方式
- 调用
now()
方法LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now();
of()
方法LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);
- 调用
- 常用方法
getXxx()
方法
返回值一般为System.out.println(localDateTime.getDayOfMonth()); System.out.println(localDateTime.getDayOfWeek()); System.out.println(localDateTime.getMonth()); System.out.println(localDateTime.getMonthValue()); System.out.println(localDateTime.getMinute());
int
withXxx()
:设置相关属性LocalDate localDate1 = localDate.withDayOfMonth(22);//原对象不变,返回新的,体现了不可变性 LocalDateTime localDateTime2 = localDateTime.withHour(4);
plusXxx()
:增加日期、时间等LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
minusXxx()
:减少···LocalDateTime localDateTime4 = localDateTime.minusDays(6);
2. Instant
类
时间戳
- 实例化
now()
方法Instant instant = Instant.now();
- 常用方法
atOffset()
获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 —> Date类的getTime()OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
toEpochMilli()
long milli = instant.toEpochMilli();
ofEpochMilli()
通过给定的毫秒数,获取Instant实例 –>Date(long millis)Instant instant1 = Instant.ofEpochMilli(1550475314878L);
3. DateTimeFormatter
类
java.time.format
- 格式化及解析日期与时间,类似于SimpleDateFormat
- 实例化
- 预定义标准格式,如:ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; //格式化:日期-->字符串 LocalDateTime localDateTime = LocalDateTime.now(); String str1 = formatter.format(localDateTime); //2020-10-29T21:05:31.4965446 //解析:字符串 -->日期 TemporalAccessor parse = formatter.parse("2020-10-29T21:05:31");
- 预定义标准格式,如:ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
- 本地化相关的格式。
ofLocalizedDateTime()
可用常量:FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG); //格式化 String str2 = formatter1.format(localDateTime); System.out.println(str2);//2020年10月29日 CST 下午9:40:55
ofLocalizedDate()
可用常量:FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); //格式化 String str3 = formatter2.format(LocalDate.now()); System.out.println(str3);//2020年10月29日
- 自定义格式。如:
ofPattern(“yyyy-MM-dd hh:mm:ss”)
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //格式化 String str4 = formatter3.format(LocalDateTime.now()); System.out.println(str4);//2020-10-29 09:47:34 //解析 TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09"); System.out.println(accessor);
8.4 java 比较器
- 说明:
- Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 <
- 在开发场景中,我们需要对多个对象进行排序,则需使用两个接口中的一个:Comparable或Comparator
Comparable
接口与Comparator
的使用的对比:- 像String、包装类重写compareTo()方法以后,进行了从小到大的排列
- 重写compareTo(obj)的规则:
- 如果当前对象this大于形参对象obj,则返回正整数,
- 如果当前对象this小于形参对象obj,则返回负整数,
- 如果当前对象this等于形参对象obj,则返回零。
- 自定义类
- 实现
Comparable
接口,重写compareTo(obj)
方法, 在compareTo(obj)
方法中指明如何排序: - 在类内部重写
compareTo()
方法(类需要implements Comparable
)//指明商品比较大小的方式:按照价格从低到高排序,再按照产品名称从高到低排序 @Override public int compareTo(Object o) { if(o instanceof Goods){ Goods goods = (Goods)o; //方式一: if(this.price > goods.price){ return 1; }else if(this.price < goods.price){ return -1; }else{ return -this.name.compareTo(goods.name); } //方式二: // return Double.compare(this.price,goods.price); } throw new RuntimeException("传入的数据类型不一致!"); }
- 实现
2. Comparator接口的使用:定制排序
- 背景:
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序 - 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
- 如果方法返回正整数,则表示o1大于o2;
- 如果返回0,表示相等;
- 返回负整数,表示o1小于o2。
- 使用
直接用匿名实现类的匿名对象Arrays.sort(arr, new Comparator(){ @Override public int compare(Object o1, Object o2) { if(o1 instanceof String && o2 instanceof String){ String s1 = (String) o1; String s2 = (String) o2; return -s1.compareTo(s2); //按照字符串从大到小的顺序排列 } return 0; throw new RuntimeException("输入的数据类型不一致"); } })
8.5 其他常用类
1. System
类
常用方法
currentTimeMillis()
void exit(int status)
:结束程序void gc()
:请求垃圾回收String getProperty(String key)
:获取相应属性值
2. Math
类
提供了一系列静态方法
public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。
BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent) :返回其值为 (exponent次方) 的 BigInteger。
3. BigInteger
与 BigDecimal
类
- BigInteger可以表示不可变的任意精度的整数
- BigDecimal类支持不可变的、任意精度的有符号十进制定点数