9.2 JDK8之前日期时间API
SimpleDateFormat,Calendar的使用
package com.atguigu.java;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* jdk 8 之前的日期时间的API测试
* 1,System类中currentTimeMillis();
* 2.java.util.Date和子类java.sql.Date
* 3.SimpleDateFormat
* 4.Calendar
* @author xq
* @create 2020-12-25-13:21
*/
public class DateTimeTest {
/*
SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析
1.两个操作:
1.1格式化:日期--->字符串
1.2解析:格式化逆过程,字符串--->日期
2.SimpleDateFormat的实例化
*/
@Test
public void testSimpleDateFormat() throws ParseException {
//实例化SimpleDateFormat:使用默认构造器
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化:日期--->字符串
Date date = new Date();
System.out.println(date);
String format = sdf.format(date);
System.out.println(format);
//解析:格式化逆过程,字符串--->日期
String str = "20-12-25 下午1:32";
Date parse = sdf.parse(str);
System.out.println(parse);
//******************按照指定的方式格式化和解析:调用带参的构造器***************
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//设置格式
//格式化
String format1 = sdf1.format(date);
System.out.println(format1);
//解析:要求字符串必须是符合SimpleDateFormat的格式(通过构造器体现)
//否则,抛异常
Date date2 = sdf1.parse("2020-12-25 01:41:05");
System.out.println(date2);
}
/*
练习一:字符串"2020-09-08"转换为java.sql.Date
*/
@Test
public void testExer() throws ParseException {
String birth = "2020-09-08";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse(birth);
java.sql.Date birthDate = new java.sql.Date(date.getTime());
System.out.println(birthDate);
}
/*
Calendar日历类(抽象类)的使用
*/
@Test
public void testCalendar(){
//1.实例化
//方式一:创建其子类的对象(GregorianCalendar)的对象
//方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
//2.常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//set()
calendar.set(Calendar.DAY_OF_MONTH,22);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//add()
calendar.add(Calendar.DAY_OF_MONTH,3);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//getTime():日历类--->Date
Date date = calendar.getTime();
System.out.println(date);
//setTime():Date--->日历类时间
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
}
}9.3 JDK8中新日期时间API
LocalDate、LocalTime、LocalDateTime的使用
package com.atguigu.java;
import org.junit.Test;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
/**
* @author xq
* @create 2020-12-25-14:37
*/
public class JDK8DateTimeTest {
/*
LocalDate、LocalTime、LocalDateTime的使用
说明:
1.LocalDate相较于LocalTime、LocalDateTime,使用频率要高
2.类似于Calendar
*/
@Test
public void test1(){
//now():获取当前的日期、时间、日期+时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
//of():设置指定的年、月、日、分、秒。没有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 11, 6, 13, 23, 30);
System.out.println(localDateTime1);
//getXxx():获取相关属性
System.out.println(localDateTime1.getDayOfMonth());
//不可变性
//withXxx():设置相关属性
LocalDate localDate2 = localDate.withDayOfMonth(22);
System.out.println(localDate);
System.out.println(localDate2);
LocalDateTime localDateTime3 = localDateTime.withHour(4);
System.out.println(localDateTime3);
System.out.println(localDateTime);
//不可变性
LocalDateTime localDateTime4 = localDateTime.plusMonths(3);
System.out.println(localDateTime4);
}
}瞬时:Instant
Instant:时间线上的一个瞬时点。这可能被用来记录应用程序中的时间时间戳
package com.atguigu.java;
import org.junit.Test;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
/**
* Instant的使用
* 类似于java.util.Date类
* @author xq
* @create 2020-12-25-15:09
*/
public class InstantTest {
@Test
public void test(){
//now()获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant);//2020-12-25T07:12:29.847Z
//添加时间的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2020-12-25T15:13:32.622+08:00
//获取自1970年1月1日0时0秒(UTC)开始的毫秒数
long milli = instant.toEpochMilli();
System.out.println(milli);//1608880603387
//ofEpochMilli()通过给定的毫秒数,获取Instant实例 ---->Date(long millis)
Instant instant1 = Instant.ofEpochMilli(1608880603387L);
System.out.println(instant1);
}
}
9.4 Java比较器
package com.atguigu.java;
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
/**
* 一、说明:Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用>或<的
* 但是在开发场景中,我们需要对多个对象进行排序,即需要比较对象的大小
* 如何实现?使用两个接口中的任何一个:Comparable或Comparator
*
* 二、Comparable接口与Comparator的使用对比:
* Comparable接口的方式一旦指定,保证Comparable接口实现类的对象在任何位置都可以比较大小
* Comparator接口属于临时性的比较。
*
*
*
*
* @author xq
* @create 2020-12-25-15:51
*/
public class CompareTest {
/*
Comparable接口的使用举例:自然排序
1.像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方式
2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列
3.重写compareTo()的规则:
如果当前对象this大于形参对象obj,则返回正整数
如果当前对象this小于形参对象obj,则返回负整数
如果当前对象this等于形参obj时,则返回零
4.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法
在compareTo(obj)方法中指明如何排序
*/
@Test
public void test1(){
String[] arr = new String[]{"aa","cc","bb","dd","pp","tt","ee"};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
/*
Comparator接口的使用:定制排序
1.背景
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码
或者实现了java.lang.Comparable接口的排序规则不适合当前的操作
那么可以考虑使用Comparator的对象来排序
2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
如果方法返回正整数,则表示o1大于o2:
如果返回0,表示相等;
返回负整数,表示o1小于o2。
*/
@Test
public void test(){
String[] arr = new String[]{"aa","cc","bb","dd","pp","tt","ee"};
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);
}
throw new RuntimeException("输入的数据类型不一致");
}
});
System.out.println(Arrays.toString(arr));
}
}
9.5 System类
package com.atguigu.java;
import org.junit.Test;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* 其他常用类的使用
* 1.System
* 2.Math
* 3.BigInteger 和 BigDecimal
*
* @author shkstart
* @create 2019 下午 6:23
*/
public class OtherClassTest {
@Test
public void test1() {
String javaVersion = System.getProperty("java.version");
System.out.println("java的version:" + javaVersion);
String javaHome = System.getProperty("java.home");
System.out.println("java的home:" + javaHome);
String osName = System.getProperty("os.name");
System.out.println("os的name:" + osName);
String osVersion = System.getProperty("os.version");
System.out.println("os的version:" + osVersion);
String userName = System.getProperty("user.name");
System.out.println("user的name:" + userName);
String userHome = System.getProperty("user.home");
System.out.println("user的home:" + userHome);
String userDir = System.getProperty("user.dir");
System.out.println("user的dir:" + userDir);
}
@Test
public void test2() {
BigInteger bi = new BigInteger("1243324112234324324325235245346567657653");
BigDecimal bd = new BigDecimal("12435.351");
BigDecimal bd2 = new BigDecimal("11");
System.out.println(bi);
// System.out.println(bd.divide(bd2));
System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP));
System.out.println(bd.divide(bd2, 25, BigDecimal.ROUND_HALF_UP));
}
}

京公网安备 11010502036488号