一、时间类
1)Java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差.
->此方法适用于计算时间差
- 计算世界时间的主要标准有:
1、UTC
2、GMT
3、CST
2)Java.util.Date
表示特定的瞬间,精确到毫秒
-
构造器:
>Date():使用无参构造器创建对象可以获取本地当地时间
>Date(long date) -
常用方法
>getTime():返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数.
>toString():把此Date对象转化为以下形式的String: dow mon dd hh:mm:ss zzz yyy 其中:dow是一周中的某一天,zzz是时间标准.
>其他很多方法都过时了.
3)java.text.SimpleDateFormat类
- Date类的API不易国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类
- 它允许进行格式化:日期->文本、解析:文本->日期
- 格式化:日期–>字符串
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
Date date = new Date();
//格式化日期-->字符串
String format = simpleDateFormat.format(date);
System.out.println(format);
- 解析:字符串–>日期
//解析字符串-->日期
String str = "2020/8/9 下午5:22";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat();
Date date1 = simpleDateFormat1.parse(str);
System.out.println(date1);
- 指定格式的解析
String str="2020-08-11 10:23:27";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date parse = sdf.parse(str);
System.out.println(parse);
4)Calendar(日历类)的使用
可以像日历一样获得指定的day,比如一年中的第几天…
用到抽象类Calendar,其实现类GregorianCalendar.
5)jdk8新增的时间类
- LocalDate、LocalTime、LocalDateTime类
LocalDate localDate = LocalDate.now();//年月日
LocalTime localTime = LocalTime.now();//时分秒
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
System.out.println(localDateTime.getDayOfMonth());//一个月中的第几天
System.out.println(localDateTime.getDayOfWeek());//一周中的第几天(星期几)
System.out.println(localDateTime.getMonth());//几月
System.out.println(localDateTime.getMonthValue());//数字几月
System.out.println(localDateTime.getDayOfYear());//一年中的第几天
//设置时间(有返回值,体现了不可变性同String)
LocalDateTime localDateTime1 = localDateTime.withMonth(1);
System.out.println(localDateTime1+" ======");
//增加时间
LocalDateTime localDateTime2 = localDateTime.plusMonths(3);
System.out.println(localDateTime2+" +++++");
//减少时间
// LocalDateTime localDateTime3 = localDateTime.minusDays(365);
// System.out.println(localDateTime3+" ----");
LocalDateTime localDateTime3 = localDateTime.plusDays(-365);
System.out.println(localDateTime3);
//指定年月日将其转化成为时间类
LocalDateTime of = LocalDateTime.of(2020, 8, 8, 22, 45, 56);
System.out.println(of.getClass());
值得注意的是.在Date中被舍弃的构造器中,存在时间偏移
Date date=new Date(2020-1900,8-1,23);
System.out.println(date);//Sun Aug 23 00:00:00 CST 2020
6)Instant类
- Instant类也可以捕获当前时间,不过得到的是位于英国伦敦的本初子午线的时间,要想获得北京东八区的时间,得调用atOffset();
Instant instant = Instant.now();
System.out.println(instant);//2020-08-13T10:32:43.449287100Z
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2020-08-13T18:37:45.322374600+08:00
- 获取从1970年元旦到现在的毫秒数(和Date中getTime方法类似)
long l = instant.toEpochMilli();
System.out.println(l);//1597315348725
- 给定毫秒数,实例化一个具体的时间(和Date类中的指定毫秒构造器一样)
Instant instant1 = Instant.ofEpochMilli(1597315348725l);
System.out.println(instant1);//2020-08-13T10:42:28.725Z
二、Java比较器
- 需求:在Java中经常会遇到对象数组的排序问题,而在正常情况下,只能进行比较:==、!=。不能使用>、<。如果要对多个对象进行排序,那么就涉及到对象之间的比较问题。
- Java实现对象排序的方式有两种(接口):
重写compareTo(),一般如果是自定义类,通常需要在原来的类里面重写toString():
1)自然排序:java.lang.Comparable
@Override
public int compareTo(Object o) {
if (this instanceof Object) {
Goods g = (Goods) o;
if (this.price > g.price) {
return 1;
} else if (this.price < g.price) {
return -1;
} else {
return 0;
}
} else {
throw new RuntimeException("输入有误!");
}
}
2)定制排序:java.util.Comparator
用到匿名内部类
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Goods1 && o2 instanceof Goods1) {
Goods1 g1 = (Goods1) o1;
Goods1 g2 = (Goods1) o2;
if (g1.getPrice() == g2.getPrice()) {
return -g1.getName().compareTo(g2.getName());
} else {
return g1.compareTo(g2);
}
} else throw new RuntimeException("类型不匹配!");
}
});
三、Math类
lava.lang.Math提供了一系列静态方法用于科学计算.其方法的参数和返回值类型一般为double型.
四、BigInteger类
BigInteger类可以表示不可变的任意精度的整数
五、BigDecimal类
在商业机计算中,Double和Float类精度往往不够,故用到java.math.BigDecimal类.
BigDecimal b1 = new BigDecimal("10");
BigDecimal b2 = new BigDecimal("3");
BigDecimal divide = b1.divide(b2,33,BigDecimal.ROUND_HALF_UP);
System.out.println(divide);