写在前面
常用类的学习结束了,现在就简单整理和通过一些小demo来巩固一下吧~
JDK8.0之前的日期时间类
1. java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。该方法适用于计算时间差
2. java.util.Date类
简单介绍
java有两个Date类: java.util.Date类及其子类java.sql.Date类
Date类可以用来表示特定的瞬间,精确到毫秒,很多方法已经弃用了
构造器
无参构造:使用无参构造器创建的对象可以获取本地当前时间。
1
2
3
4public Date() { this(System.currentTimeMillis()); }
有参构造:传入一个long型毫秒数时间值(无参构造可以调用)
1
2
3
4public Date(long date) { fastTime = date; }
常用方法
getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
1
2
3
4
5
6
7
8
9
10
11public long getTime() { return getTimeImpl(); } private final long getTimeImpl() { if (cdate != null && !cdate.isNormalized()) { normalize(); } return fastTime; }
toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public String toString() { // "EEE MMM dd HH:mm:ss zzz yyyy"; BaseCalendar.Date date = normalize(); StringBuilder sb = new StringBuilder(28); int index = date.getDayOfWeek(); if (index == BaseCalendar.SUNDAY) { index = 8; } convertToAbbr(sb, wtb[index]).append(' '); // EEE convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss TimeZone zi = date.getZone(); if (zi != null) { sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz } else { sb.append("GMT"); } sb.append(' ').append(date.getYear()); // yyyy return sb.toString(); }
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15package com.deserts.demo02; import java.util.Date; public class DateTest { public static void main(String[] args) { //构造器 Date date = new Date(); //getTime() System.out.println(date.getTime()); //toString System.out.println(date.toString()); } }
运行结果:
3. java.text.SimpleDateFormat类
简单说明
1.Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
2.它允许进行格式化:日期文本、解析:文本日期
格式化
1.SimpleDateFormat() :默认的模式和语言环境创建对象
2. public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
3.public String format(Date date):方法格式化时间对象date
解析
public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
demo
简单的格式化与解析:调用无参构造器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package com.deserts.demo02; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class FormatTest { public static void main(String[] args) { //实例化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-7-14 上午00:29"; Date date1 = null; try { date1 = sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date1); } }
运行结果
按照指定的方式格式化和解析:调用带参的构造器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26package com.deserts.demo02; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class FormatTest02 { public static void main(String[] args) { SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); //格式化 String format1 = sdf1.format(date); System.out.println(format1); //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现), //否则,抛异常 Date date2 = null; try { date2 = sdf1.parse("2020-07-14 00:37:27"); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date2); } }
运行结果
4. java.util.Calendar(日历)类
简单介绍
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法
1.使用Calendar.getInstance()方法
2.调用它的子类GregorianCalendar的构造器。
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42package com.deserts.demo02; import java.util.Calendar; import java.util.Date; public class CalendarTest { public static void main(String[] args) { //1.实例化 //方式一:创建其子类(GregorianCalendar)的对象 //方式二:调用其静态方法getInstance() Calendar calendar = Calendar.getInstance(); //2.常用方法 //get() int days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days); System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //set() //calendar可变性 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); } }
运行结果
偏移量测试
1
2
3
4
5
6
7
8
9
10
11
12
13package com.deserts.demo02; import java.util.Date; public class JDK8DateTest { public static void main(String[] args) { //偏移量 Date date1 = new Date(2020 - 1900,7 - 1,14); System.out.println(date1);//Tue Jul 14 00:00:00 CST 2020 } }
JDK8.0中新日期时间API(重点)
简单介绍
LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
1.LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
2.LocalTime表示一个时间,而不是日期。
3.LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法,也就是公历。
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.deserts.demo02; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; public class JDK8DateTest { public static void main(String[] args) { //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, 7, 14, 8, 56, 43); System.out.println(localDateTime1); //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()); //体现不可变性 //withXxx():设置相关的属性 LocalDate localDate1 = localDate.withDayOfMonth(22); System.out.println(localDate); System.out.println(localDate1); LocalDateTime localDateTime2 = localDateTime.withHour(4); System.out.println(localDateTime); System.out.println(localDateTime2); //不可变性 LocalDateTime localDateTime3 = localDateTime.plusMonths(3); System.out.println(localDateTime); System.out.println(localDateTime3); LocalDateTime localDateTime4 = localDateTime.minusDays(6); System.out.println(localDateTime); System.out.println(localDateTime4); } }
运行结果
瞬时:Instant
Instant的使用类似于 java.util.Date类
常用方法
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27package com.deserts.demo02; import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; public class InstanceTest { public static void main(String[] args) { //now():获取本初子午线对应的标准时间 Instant instant = Instant.now(); System.out.println(instant); //添加时间的偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime); //toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 ---> Date类的getTime() long milli = instant.toEpochMilli(); System.out.println(milli); //ofEpochMilli():通过给定的毫秒数,获取Instant实例 -->Date(long millis) Instant instant1 = Instant.ofEpochMilli(1594688596771L); System.out.println(instant1); } }
运行结果
格式化:DateTimeFormatter 类
常用方法
demo
方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package com.deserts.demo02; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class FormatTest03 { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; //格式化:日期-->字符串 LocalDateTime localDateTime = LocalDateTime.now(); String str1 = formatter.format(localDateTime); System.out.println(localDateTime); System.out.println(str1); //解析:字符串 -->日期 TemporalAccessor parse = formatter.parse("2020-07-14T09:13:58.131"); System.out.println(parse); } }
运行结果
方式二:本地化相关的格式。如:ofLocalizedDateTime()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27package com.deserts.demo02; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; public class FormatTest04 { public static void main(String[] args) { DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG); LocalDateTime localDateTime = LocalDateTime.now(); //格式化 String str2 = formatter1.format(localDateTime); System.out.println(str2);//2020年7月14日 上午09时18分53秒 // 本地化相关的格式。如:ofLocalizedDate() // FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适用于LocalDate DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); //格式化 String str3 = formatter2.format(LocalDate.now()); System.out.println(str3);//2020-7-14 } }
方式三(重点):自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.deserts.demo02; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; public class FormatTest05 { public static void main(String[] args) { DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //格式化 String str4 = formatter3.format(LocalDateTime.now()); System.out.println(str4);//2020-07-14 09:22:28 //解析 TemporalAccessor accessor = formatter3.parse("2020-07-14 09:21:57"); System.out.println(accessor); //{MinuteOfHour=21, SecondOfMinute=57, NanoOfSecond=0, MicroOfSecond=0, HourOfAmPm=9, MilliOfSecond=0},ISO resolved to 2020-07-14 } }
其它API
Java比较器
概述
自然排序:java.lang.Comparable
简介
Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
如何排序
1.实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大 于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。
2.实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
3.对于类 C 的每一个 e1 和 e2 来说,当且仅当e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。
Comparable 的典型实现:(默认都是从小到大排列的)
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.deserts.stringdemo01; import java.util.Arrays; public class CompareTest { public static void main(String[] args) { Goods[] g = new Goods[4]; g[0] = new Goods(15, "卫龙"); g[1] = new Goods(56, "三只松鼠"); g[2] = new Goods(8, "百草味"); g[3] = new Goods(23, "良品铺子"); Arrays.sort(g); System.out.println(Arrays.toString(g)); } } class Goods implements Comparable{ private int price; private String name; public Goods() { } public Goods(int price, String name) { this.price = price; this.name = name; } @Override public int compareTo(Object o) { if(o instanceof Goods){ Goods g = (Goods)o; if(this.price > g.price){ return 1; }else if (this.price < g.price){ return -1; }else { return 0; } } throw new RuntimeException("类型不一致"); } @Override public String toString() { return "Goods{" + "price=" + price + ", name='" + name + ''' + '}'; } }
运行结果
[Goods{price=8, name=‘百草味’}, Goods{price=15, name=‘卫龙’}, Goods{price=23, name=‘良品铺子’}, Goods{price=56, name=‘三只松鼠’}]
定制排序:java.util.Comparator
简单介绍
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70package com.deserts.demo02; import java.util.Arrays; import java.util.Comparator; class Goods1 { private int price; private String name; public int getPrice() { return price; } public String getName() { return name; } public Goods1() { } public Goods1(int price, String name) { this.price = price; this.name = name; } @Override public String toString() { return "Goods{" + "price=" + price + ", name='" + name + ''' + '}'; } } public class ComparatorTest { public static void main(String[] args) { Goods1[] arr = new Goods1[6]; arr[0] = new Goods1(34,"lenovoMouse"); arr[1] = new Goods1(43,"dellMouse"); arr[2] = new Goods1(12,"xiaomiMouse"); arr[3] = new Goods1(65,"huaweiMouse"); arr[4] = new Goods1(224,"huaweiMouse"); arr[5] = new Goods1(43,"microsoftMouse"); 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.getName().equals(g2.getName())){ return -Double.compare(g1.getPrice(),g2.getPrice()); }else{ return g1.getName().compareTo(g2.getName()); } } throw new RuntimeException("输入的数据类型不一致"); } }); System.out.println(Arrays.toString(arr)); } }
运行结果
[Goods{price=43, name=‘dellMouse’}, Goods{price=224, name=‘huaweiMouse’}, Goods{price=65, name=‘huaweiMouse’}, Goods{price=34, name=‘lenovoMouse’}, Goods{price=43, name=‘microsoftMouse’}, Goods{price=12, name=‘xiaomiMouse’}]
System类
Math类
BigInteger与BigDecimal
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19package com.deserts.demo02; import java.math.BigDecimal; import java.math.BigInteger; public class BIgNumDemo { public static void main(String[] args) { 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)); } }
运行结果
写在最后
这几个类中比较重要的应该是JDK8.0的日期时间类和Java比较器,内容都比较多,多练多熟悉就完事了~
最后
以上就是顺利水池最近收集整理的关于JavaSE10:日期时间类、java比较器、System类、Math类、大数类写在前面JDK8.0之前的日期时间类JDK8.0中新日期时间API(重点)Java比较器System类Math类BigInteger与BigDecimal写在最后的全部内容,更多相关JavaSE10:日期时间类、java比较器、System类、Math类、大数类写在前面JDK8.0之前内容请搜索靠谱客的其他文章。
发表评论 取消回复