概述
写在前面
常用类的学习结束了,现在就简单整理和通过一些小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类可以用来表示特定的瞬间,精确到毫秒,很多方法已经弃用了
构造器
无参构造:使用无参构造器创建的对象可以获取本地当前时间。
public Date() {
this(System.currentTimeMillis());
}
有参构造:传入一个long型毫秒数时间值(无参构造可以调用)
public Date(long date) {
fastTime = date;
}
常用方法
getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
public 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是时间标准。
public 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
package 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
简单的格式化与解析:调用无参构造器
package 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);
}
}
运行结果
按照指定的方式格式化和解析:调用带参的构造器
package 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
package 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);
}
}
运行结果
偏移量测试
package 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
package 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
package 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
package 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()
package 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”)
package 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
package 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
package 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
package 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之前的日期时间类JDK8.0中新日期时间API(重点)Java比较器System类Math类BigInteger与BigDecimal写在最后所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复