【免费Java系列】大家好 ,今天是学习面向对象高级的第四天点赞收藏关注,持续更新作品 !

 这是java进阶课面向对象第一天的课程可以坐传送去学习http://t.csdnimg.cn/Lq3io

day04——常用API

一、 StringBuilder类

  • StringBuilder代表可变字符串对象,相当于是一个容器,它里面的字符串是可以改变的,就是用来操作字符串的。

  • 好处:StringBuilder比String更合适做字符串的修改操作,效率更高,代码也更加简洁。

1.1 StringBuilder方法演示

接下来我们用代码演示一下StringBuilder的用法

public class Test{public static void main(String[] args){StringBuilder sb = new StringBuilder("itehima");//1.拼接内容sb.append(12);sb.append("黑马");sb.append(true);//2.append方法,支持临时编程sb.append(666).append("黑马2").append(666);System.out.println(sb); //打印:12黑马666黑马2666//3.反转操作sb.reverse();System.out.println(sb); //打印:6662马黑666马黑21//4.返回字符串的长度System.out.println(sb.length());//5.StringBuilder还可以转换为字符串String s = sb.toString();System.out.println(s); //打印:6662马黑666马黑21}
}

为什么要用StringBuilder对字符串进行操作呢?因为它的效率比String更高,我们可以下面两段代码验证一下。

经过我的验证,直接使用Stirng拼接100万次,等了1分钟,还没结束,我等不下去了;但是使用StringBuilder做拼接,不到1秒钟出结果了。

1.2 StringBuilder应用案例

接下来,我们通过一个案例把StringBuilder运用下,案例需求如下图所示

代码如下

public class Test{public static void main(String[] args){String str = getArrayData( new int[]{11,22,33});System.out.println(str);}//方法作用:将int数组转换为指定格式的字符串public static String getArrayData(int[] arr){//1.判断数组是否为nullif(arr==null){return null;}//2.如果数组不为null,再遍历,并拼接数组中的元素StringBuilder sb = new StringBuilder("[");for(int i=0; i<arr.length; i++){if(i==arr.legnth-1){sb.append(arr[i]).append("]");;}else{sb.append(arr[i]).append(",");}}//3、把StirngBuilder转换为String,并返回。return sb.toString();}
}

二、StringJoiner类

接下来,我们学习一个类叫做StringJoiner,学习这个类干嘛用呢?是因为我们前面使用StringBuilder拼接字符串的时,代码写起来还是有一点麻烦,而StringJoiner号称是拼接神器,不仅效率高,而且代码简洁。

下面演示一下StringJoiner的基本使用

public class Test{public static void main(String[] args){StringJoiner s = new StringJoiner(",");s.add("java1");s.add("java2");s.add("java3");System.out.println(s); //结果为: java1,java2,java3//参数1:间隔符//参数2:开头//参数3:结尾StringJoiner s1 = new StringJoiner(",","[","]");s1.add("java1");s1.add("java2");s1.add("java3");System.out.println(s1); //结果为: [java1,java2,java3]}
}

使用StirngJoiner改写前面把数组转换为字符串的案例

public class Test{public static void main(String[] args){String str = getArrayData( new int[]{11,22,33});System.out.println(str);}//方法作用:将int数组转换为指定格式的字符串public static String getArrayData(int[] arr){//1.判断数组是否为nullif(arr==null){return null;}//2.如果数组不为null,再遍历,并拼接数组中的元素StringJoiner s = new StringJoiner(", ","[","]");for(int i=0; i<arr.length; i++){//加""是因为add方法的参数要的是String类型s.add(String.valueOf(arr[i]));}//3、把StringJoiner转换为String,并返回。return s.toString();}
}

三、Math类

Math是数学的意思,该类提供了很多个进行数学运算的方法,如求绝对值,求最大值,四舍五入等,话不多说,直接上代码。

public class MathTest {public static void main(String[] args) {// 目标:了解下Math类提供的常见方法。// 1、public static int abs(int a):取绝对值(拿到的结果一定是正数)//    public static double abs(double a)System.out.println(Math.abs(-12)); // 12System.out.println(Math.abs(123)); // 123System.out.println(Math.abs(-3.14)); // 3.14
​// 2、public static double ceil(double a): 向上取整System.out.println(Math.ceil(4.0000001)); // 5.0System.out.println(Math.ceil(4.0)); // 4.0
​// 3、public static double floor(double a): 向下取整System.out.println(Math.floor(4.999999)); // 4.0System.out.println(Math.floor(4.0)); // 4.0
​// 4、public static long round(double a):四舍五入System.out.println(Math.round(3.4999)); // 3System.out.println(Math.round(3.50001)); // 4
​// 5、public static int max(int a, int b):取较大值//   public static int min(int a, int b):取较小值System.out.println(Math.max(10, 20)); // 20System.out.println(Math.min(10, 20)); // 10
​// 6、 public static double pow(double a, double b):取次方System.out.println(Math.pow(2, 3)); // 2的3次方   8.0System.out.println(Math.pow(3, 2)); // 3的2次方   9.0
​// 7、public static double random(): 取随机数 [0.0 , 1.0) (包前不包后)System.out.println(Math.random());}
}

四、 System类

接下来,学习一个System类,这是系统类,提供了一些获取获取系统数据的方法。比如获取系统时间。

/*** 目标:了解下System类的常见方法。*/
public class SystemTest {public static void main(String[] args) {
​// 1、public static void exit(int status)://   终止当前运行的Java虚拟机。//   该参数用作状态代码; 按照惯例,非零状态代码表示异常终止。System.exit(0); // 人为的终止虚拟机。(不要使用)
​// 2、public static long currentTimeMillis()://    获取当前系统的时间//    返回的是long类型的时间毫秒值:指的是从1970-1-1 0:0:0开始走到此刻的总的毫秒值,1s = 1000mslong time = System.currentTimeMillis();System.out.println(time);
​for (int i = 0; i < 1000000; i++) {System.out.println("输出了:" + i);}
​long time2 = System.currentTimeMillis();System.out.println((time2 - time) / 1000.0 + "s");}
}

五、Runtime类

接下来,我们再学习一个Java的运行时类,叫Runtime类。这个类可以用来获取JVM的一些信息,也可以用这个类去执行其他的程序。话不多少,上代码。

/***  目标:了解下Runtime的几个常见方法。*/
public class RuntimeTest {public static void main(String[] args) throws IOException, InterruptedException {
​// 1、public static Runtime getRuntime() 返回与当前Java应用程序关联的运行时对象。Runtime r = Runtime.getRuntime();
​// 2、public void exit(int status) 终止当前运行的虚拟机,该参数用作状态代码; 按照惯例,非零状态代码表示异常终止。// r.exit(0);
​// 3、public int availableProcessors(): 获取虚拟机能够使用的处理器数。System.out.println(r.availableProcessors());
​// 4、public long totalMemory() 返回Java虚拟机中的内存总量。System.out.println(r.totalMemory()/1024.0/1024.0 + "MB"); // 1024 = 1K     1024 * 1024 = 1M
​// 5、public long freeMemory() 返回Java虚拟机中的可用内存量System.out.println(r.freeMemory()/1024.0/1024.0 + "MB");
​// 6、public Process exec(String command) 启动某个程序,并返回代表该程序的对象。// r.exec("D:\\soft\\XMind\\XMind.exe");Process p = r.exec("QQ");Thread.sleep(5000); // 让程序在这里暂停5s后继续往下走!!p.destroy(); // 销毁!关闭程序!}
}

六、BigDecimal类

各位同学,接下来我们学习的这个类叫BigDecimal,至于它是干什么用的,我们先不说。我们先看一段代码,看这个代码有什么问题?再说BigDeimal这个类是干什么用的,这样会更好理解一些。

public class Test {public static void main(String[] args) {System.out.println(0.1 + 0.2);System.out.println(1.0 - 0.32);System.out.println(1.015 * 100);System.out.println(1.301 / 100);}
}

运行以上代码,我们会发现,结果并和我们想看到的不太一样。如下图所示

为了解决计算精度损失的问题,Java给我们提供了BigDecimal类,它提供了一些方法可以对数据进行四则运算,而且不丢失精度,同时还可以保留指定的小数位。下面看代码,演示一下

public class Test2 {public static void main(String[] args) {// 目标:掌握BigDecimal进行精确运算的方案。double a = 0.1;double b = 0.2;
​// 1、把浮点型数据封装成BigDecimal对象,再来参与运算。// a、public BigDecimal(double val) 得到的BigDecimal对象是无法精确计算浮点型数据的。 注意:不推荐使用这个,// b、public BigDecimal(String val)  得到的BigDecimal对象是可以精确计算浮点型数据的。 可以使用。// c、public static BigDecimal valueOf(double val): 通过这个静态方法得到的BigDecimal对象是可以精确运算的。是最好的方案。BigDecimal a1 = BigDecimal.valueOf(a);BigDecimal b1 = BigDecimal.valueOf(b);
​// 2、public BigDecimal add(BigDecimal augend): 加法BigDecimal c1 = a1.add(b1);System.out.println(c1);
​// 3、public BigDecimal subtract(BigDecimal augend): 减法BigDecimal c2 = a1.subtract(b1);System.out.println(c2);
​// 4、public BigDecimal multiply(BigDecimal augend): 乘法BigDecimal c3 = a1.multiply(b1);System.out.println(c3);
​// 5、public BigDecimal divide(BigDecimal b): 除法BigDecimal c4 = a1.divide(b1);System.out.println(c4);
​
//        BigDecimal d1 = BigDecimal.valueOf(0.1);
//        BigDecimal d2 = BigDecimal.valueOf(0.3);
//        BigDecimal d3 = d1.divide(d2);
//        System.out.println(d3);
​// 6、public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式) : 除法,可以设置精确几位。BigDecimal d1 = BigDecimal.valueOf(0.1);BigDecimal d2 = BigDecimal.valueOf(0.3);BigDecimal d3 = d1.divide(d2,  2, RoundingMode.HALF_UP); // 0.33System.out.println(d3);
​// 7、public double doubleValue() : 把BigDecimal对象又转换成double类型的数据。//print(d3);//print(c1);double db1 = d3.doubleValue();double db2 = c1.doubleValue();print(db1);print(db2);}
​public static void print(double a){System.out.println(a);}
}
​

五、Date类

接下来,我们学习一下Date类,Java中是由这个类的对象用来表示日期或者时间。

Date对象记录的时间是用毫秒值来表示的。Java语言规定,1970年1月1日0时0分0秒认为是时间的起点,此时记作0,那么1000(1秒=1000毫秒)就表示1970年1月1日0时0分1秒,依次内推。

下面是Date类的构造方法,和常见的成员方法,利用这些API写代码尝试一下

public class Test1Date {public static void main(String[] args) {// 目标:掌握Date日期类的使用。// 1、创建一个Date的对象:代表系统当前时间信息的。Date d = new Date();System.out.println(d);
​// 2、拿到时间毫秒值。long time = d.getTime();System.out.println(time);
​// 3、把时间毫秒值转换成日期对象: 2s之后的时间是多少。time += 2 * 1000;Date d2 = new Date(time);System.out.println(d2);
​// 4、直接把日期对象的时间通过setTime方法进行修改Date d3 = new Date();d3.setTime(time);System.out.println(d3);}
}

六、SimpleDateFormat类

各位同学,前面我们打印Date对象时,发现打印输出的日期格式我们并不喜欢,是不是?你们喜欢那种格式呢?是不是像下面页面中这种格式啊?接下来我们学习的SimpleDateFormat类就可以转换Date对象表示日期时间的显示格式。

  • 我们把Date对象转换为指定格式的日期字符串这个操作,叫做日期格式化,

  • 反过来把指定格式的日期符串转换为Date对象的操作,叫做日期解析。

接下来,我们先演示一下日期格式化,需要用到如下的几个方法

注意:创建SimpleDateFormat对象时,在构造方法的参数位置传递日期格式,而日期格式是由一些特定的字母拼接而来的。我们需要记住常用的几种日期/时间格式

字母     表示含义
yyyy    年
MM      月
dd      日
HH      时
mm      分
ss      秒
SSS     毫秒
​
"2022年12月12日" 的格式是 "yyyy年MM月dd日"
"2022-12-12 12:12:12" 的格式是 "yyyy-MM-dd HH:mm:ss"
按照上面的格式可以任意拼接,但是字母不能写错

最后,上代码演示一下

public class Test2SimpleDateFormat {public static void main(String[] args) throws ParseException {// 目标:掌握SimpleDateFormat的使用。// 1、准备一些时间Date d = new Date();System.out.println(d);
​long time = d.getTime();System.out.println(time);
​// 2、格式化日期对象,和时间 毫秒值。SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
​String rs = sdf.format(d);String rs2 = sdf.format(time);System.out.println(rs);System.out.println(rs2);System.out.println("----------------------------------------------");
​// 目标:掌握SimpleDateFormat解析字符串时间 成为日期对象。String dateStr = "2022-12-12 12:12:11";// 1、创建简单日期格式化对象 , 指定的时间格式必须与被解析的时间格式一模一样,否则程序会出bug.SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d2 = sdf2.parse(dateStr);System.out.println(d2);}
}

日期格式化&解析案例

public class Test3 {public static void main(String[] args) throws ParseException {// 目标:完成秒杀案例。// 1、把开始时间、结束时间、小贾下单时间、小皮下单时间拿到程序中来。String start = "2023年11月11日 0:0:0";String end = "2023年11月11日 0:10:0";String xj = "2023年11月11日 0:01:18";String xp = "2023年11月11日 0:10:57";
​// 2、把字符串的时间解析成日期对象。SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");Date startDt = sdf.parse(start);Date endDt = sdf.parse(end);Date xjDt = sdf.parse(xj);Date xpDt = sdf.parse(xp);
​// 3、开始判断小皮和小贾是否秒杀成功了。// 把日期对象转换成时间毫秒值来判断long startTime = startDt.getTime();long endTime = endDt.getTime();long xjTime = xjDt.getTime();long xpTime = xpDt.getTime();
​if(xjTime >= startTime && xjTime <= endTime){System.out.println("小贾您秒杀成功了~~");}else {System.out.println("小贾您秒杀失败了~~");}
​if(xpTime >= startTime && xpTime <= endTime){System.out.println("小皮您秒杀成功了~~");}else {System.out.println("小皮您秒杀失败了~~");}}
}

七、Calendar类

学完Date类和SimpleDateFormat类之后,我们再学习一个和日期相关的类,它是Calendar类。Calendar类表示日历,它提供了一些比Date类更好用的方法。

比如下面的案例,用Date类就不太好做,而用Calendar就特别方便。因为Calendar类提供了方法可以直接对日历中的年、月、日、时、分、秒等进行运算。

public class Test4Calendar {public static void main(String[] args) {// 目标:掌握Calendar的使用和特点。// 1、得到系统此刻时间对应的日历对象。Calendar now = Calendar.getInstance();System.out.println(now);
​// 2、获取日历中的某个信息int year = now.get(Calendar.YEAR);System.out.println(year);
​int days = now.get(Calendar.DAY_OF_YEAR);System.out.println(days);
​// 3、拿到日历中记录的日期对象。Date d = now.getTime();System.out.println(d);
​// 4、拿到时间毫秒值long time = now.getTimeInMillis();System.out.println(time);
​// 5、修改日历中的某个信息now.set(Calendar.MONTH, 9); // 修改月份成为10月份。now.set(Calendar.DAY_OF_YEAR, 125); // 修改成一年中的第125天。System.out.println(now);
​// 6、为某个信息增加或者减少多少now.add(Calendar.DAY_OF_YEAR, 100);now.add(Calendar.DAY_OF_YEAR, -10);now.add(Calendar.DAY_OF_MONTH, 6);now.add(Calendar.HOUR, 12);now.set(2026, 11, 22);System.out.println(now);}
}

八、为什么JDK8要新增日期类

/***  目标:搞清楚为什么要用JDK 8开始新增的时间类。*/
public class Test {public static void main(String[] args) {// 传统的时间类(Date、SimpleDateFormat、Calendar)存在如下问题:// 1、设计不合理,使用不方便,很多都被淘汰了。Date d = new Date();//System.out.println(d.getYear() + 1900);
​Calendar c = Calendar.getInstance();int year = c.get(Calendar.YEAR);System.out.println(year);
​// 2、都是可变对象,修改后会丢失最开始的时间信息。
​// 3、线程不安全。
​// 4、不能精确到纳秒,只能精确到毫秒。// 1秒 = 1000毫秒// 1毫秒 = 1000微妙// 1微妙 = 1000纳秒}
}

九、JDK8日期、时间、日期时间

接下来,我们学习一下JDK8新增的日期类。为什么以前的Date类就可以表示日期,为什么要有新增的日期类呢?原因如下

JDK8新增的日期类分得更细致一些,比如表示年月日用LocalDate类、表示时间秒用LocalTime类、而表示年月日时分秒用LocalDateTime类等;除了这些类还提供了对时区、时间间隔进行操作的类等。它们几乎把对日期/时间的所有操作都通过了API方法,用起来特别方便。

先学习表示日期、时间、日期时间的类;有LocalDate、LocalTime、以及LocalDateTime类。仔细阅读代码,你会发现这三个类的用法套路都是一样的。

  • LocalDate类的基本使用

public class Test1_LocalDate {public static void main(String[] args) {// 0、获取本地日期对象(不可变对象)LocalDate ld = LocalDate.now(); // 年 月 日System.out.println(ld);
​// 1、获取日期对象中的信息int year = ld.getYear(); // 年int month = ld.getMonthValue(); // 月(1-12)int day = ld.getDayOfMonth(); // 日int dayOfYear = ld.getDayOfYear();  // 一年中的第几天int dayOfWeek = ld.getDayOfWeek().getValue(); // 星期几System.out.println(year);System.out.println(day);System.out.println(dayOfWeek);
​// 2、直接修改某个信息: withYear、withMonth、withDayOfMonth、withDayOfYearLocalDate ld2 = ld.withYear(2099);LocalDate ld3 = ld.withMonth(12);System.out.println(ld2);System.out.println(ld3);System.out.println(ld);
​// 3、把某个信息加多少: plusYears、plusMonths、plusDays、plusWeeksLocalDate ld4 = ld.plusYears(2);LocalDate ld5 = ld.plusMonths(2);
​// 4、把某个信息减多少:minusYears、minusMonths、minusDays、minusWeeksLocalDate ld6 = ld.minusYears(2);LocalDate ld7 = ld.minusMonths(2);
​// 5、获取指定日期的LocalDate对象: public static LocalDate of(int year, int month, int dayOfMonth)LocalDate ld8 = LocalDate.of(2099, 12, 12);LocalDate ld9 = LocalDate.of(2099, 12, 12);
​// 6、判断2个日期对象,是否相等,在前还是在后: equals isBefore isAfterSystem.out.println(ld8.equals(ld9));// trueSystem.out.println(ld8.isAfter(ld)); // trueSystem.out.println(ld8.isBefore(ld)); // false}
}
  • LocalTime类的基本使用

public class Test2_LocalTime {public static void main(String[] args) {// 0、获取本地时间对象LocalTime lt = LocalTime.now(); // 时 分 秒 纳秒 不可变的System.out.println(lt);
​// 1、获取时间中的信息int hour = lt.getHour(); //时int minute = lt.getMinute(); //分int second = lt.getSecond(); //秒int nano = lt.getNano(); //纳秒
​// 2、修改时间:withHour、withMinute、withSecond、withNanoLocalTime lt3 = lt.withHour(10);LocalTime lt4 = lt.withMinute(10);LocalTime lt5 = lt.withSecond(10);LocalTime lt6 = lt.withNano(10);
​// 3、加多少:plusHours、plusMinutes、plusSeconds、plusNanosLocalTime lt7 = lt.plusHours(10);LocalTime lt8 = lt.plusMinutes(10);LocalTime lt9 = lt.plusSeconds(10);LocalTime lt10 = lt.plusNanos(10);
​// 4、减多少:minusHours、minusMinutes、minusSeconds、minusNanosLocalTime lt11 = lt.minusHours(10);LocalTime lt12 = lt.minusMinutes(10);LocalTime lt13 = lt.minusSeconds(10);LocalTime lt14 = lt.minusNanos(10);
​// 5、获取指定时间的LocalTime对象:// public static LocalTime of(int hour, int minute, int second)LocalTime lt15 = LocalTime.of(12, 12, 12);LocalTime lt16 = LocalTime.of(12, 12, 12);
​// 6、判断2个时间对象,是否相等,在前还是在后: equals isBefore isAfterSystem.out.println(lt15.equals(lt16)); // trueSystem.out.println(lt15.isAfter(lt)); // falseSystem.out.println(lt15.isBefore(lt)); // true
​}
}
  • LocalDateTime类的基本使用

public class Test3_LocalDateTime {public static void main(String[] args) {// 0、获取本地日期和时间对象。LocalDateTime ldt = LocalDateTime.now(); // 年 月 日 时 分 秒 纳秒System.out.println(ldt);
​// 1、可以获取日期和时间的全部信息int year = ldt.getYear(); // 年int month = ldt.getMonthValue(); // 月int day = ldt.getDayOfMonth(); // 日int dayOfYear = ldt.getDayOfYear();  // 一年中的第几天int dayOfWeek = ldt.getDayOfWeek().getValue();  // 获取是周几int hour = ldt.getHour(); //时int minute = ldt.getMinute(); //分int second = ldt.getSecond(); //秒int nano = ldt.getNano(); //纳秒
​// 2、修改时间信息:// withYear withMonth withDayOfMonth withDayOfYear withHour// withMinute withSecond withNanoLocalDateTime ldt2 = ldt.withYear(2029);LocalDateTime ldt3 = ldt.withMinute(59);
​// 3、加多少:// plusYears  plusMonths plusDays plusWeeks plusHours plusMinutes plusSeconds plusNanosLocalDateTime ldt4 = ldt.plusYears(2);LocalDateTime ldt5 = ldt.plusMinutes(3);
​// 4、减多少:// minusDays minusYears minusMonths minusWeeks minusHours minusMinutes minusSeconds minusNanosLocalDateTime ldt6 = ldt.minusYears(2);LocalDateTime ldt7 = ldt.minusMinutes(3);
​
​// 5、获取指定日期和时间的LocalDateTime对象:// public static LocalDateTime of(int year, Month month, int dayOfMonth, int hour,//                                  int minute, int second, int nanoOfSecond)LocalDateTime ldt8 = LocalDateTime.of(2029, 12, 12, 12, 12, 12, 1222);LocalDateTime ldt9 = LocalDateTime.of(2029, 12, 12, 12, 12, 12, 1222);
​// 6、 判断2个日期、时间对象,是否相等,在前还是在后: equals、isBefore、isAfterSystem.out.println(ldt9.equals(ldt8));System.out.println(ldt9.isAfter(ldt));System.out.println(ldt9.isBefore(ldt));
​// 7、可以把LocalDateTime转换成LocalDate和LocalTime// public LocalDate toLocalDate()// public LocalTime toLocalTime()// public static LocalDateTime of(LocalDate date, LocalTime time)LocalDate ld = ldt.toLocalDate();LocalTime lt = ldt.toLocalTime();LocalDateTime ldt10 = LocalDateTime.of(ld, lt);
​}
}

十、JDK8日期(时区)

接着,我们学习代表时区的两个类。由于世界各个国家与地区的经度不同,各地区的时间也有所不同,因此会划分为不同的时区。每一个时区的时间也不太一样。

public class Test4_ZoneId_ZonedDateTime {public static void main(String[] args) {// 目标:了解时区和带时区的时间。// 1、ZoneId的常见方法:// public static ZoneId systemDefault(): 获取系统默认的时区ZoneId zoneId = ZoneId.systemDefault();System.out.println(zoneId.getId());System.out.println(zoneId);
​// public static Set<String> getAvailableZoneIds(): 获取Java支持的全部时区IdSystem.out.println(ZoneId.getAvailableZoneIds());
​// public static ZoneId of(String zoneId) : 把某个时区id封装成ZoneId对象。ZoneId zoneId1 = ZoneId.of("America/New_York");
​// 2、ZonedDateTime:带时区的时间。// public static ZonedDateTime now(ZoneId zone): 获取某个时区的ZonedDateTime对象。ZonedDateTime now = ZonedDateTime.now(zoneId1);System.out.println(now);
​// 世界标准时间了ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());System.out.println(now1);
​// public static ZonedDateTime now():获取系统默认时区的ZonedDateTime对象ZonedDateTime now2 = ZonedDateTime.now();System.out.println(now2);
​// Calendar instance = Calendar.getInstance(TimeZone.getTimeZone(zoneId1));}
}

十一、JDK8日期(Instant类)

接下来,我们来学习Instant这个类。通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00 开始走到此刻的总秒数+不够1秒的纳秒数。

该类提供的方法如下图所示,可以用来获取当前时间,也可以对时间进行加、减、获取等操作。

作用:可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。

/*** 目标:掌握Instant的使用。*/
public class Test5_Instant {public static void main(String[] args) {// 1、创建Instant的对象,获取此刻时间信息Instant now = Instant.now(); // 不可变对象
​// 2、获取总秒数long second = now.getEpochSecond();System.out.println(second);
​// 3、不够1秒的纳秒数int nano = now.getNano();System.out.println(nano);
​System.out.println(now);
​Instant instant = now.plusNanos(111);
​// Instant对象的作用:做代码的性能分析,或者记录用户的操作时间点Instant now1 = Instant.now();// 代码执行。。。。Instant now2 = Instant.now();
​LocalDateTime l = LocalDateTime.now();}
}

十二、JDK8日期(格式化器)

接下来,我们学习一个新增的日期格式化类,叫DateTimeFormater。它可以从来对日期进行格式化和解析。它代替了原来的SimpleDateFormat类。

需要用到的方法,如下图所示

接下来,将上面的方法用代码来演示一下

/***  目标:掌握JDK 8新增的DateTimeFormatter格式化器的用法。*/
public class Test6_DateTimeFormatter {public static void main(String[] args) {// 1、创建一个日期时间格式化器对象出来。DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
​// 2、对时间进行格式化LocalDateTime now = LocalDateTime.now();System.out.println(now);
​String rs = formatter.format(now); // 正向格式化System.out.println(rs);
​// 3、格式化时间,其实还有一种方案。String rs2 = now.format(formatter); // 反向格式化System.out.println(rs2);
​// 4、解析时间:解析时间一般使用LocalDateTime提供的解析方法来解析。String dateStr = "2029年12月12日 12:12:11";LocalDateTime ldt = LocalDateTime.parse(dateStr, formatter);System.out.println(ldt);}
}
​

十三、JDK8日期(Period类)

除以了上新增的类,JDK8还补充了两个类,一个叫Period类、一个叫Duration类;这两个类可以用来对计算两个时间点的时间间隔。

其中Period用来计算日期间隔(年、月、日),Duration用来计算时间间隔(时、分、秒、纳秒)

先来演示Period类的用法,它的方法如下图所示。可以用来计算两个日期之间相隔的年、相隔的月、相隔的日。只能两个计算LocalDate对象之间的间隔

/*** 目标:掌握Period的作用:计算机两个日期相差的年数,月数、天数。*/
public class Test7_Period {public static void main(String[] args) {LocalDate start = LocalDate.of(2029, 8, 10);LocalDate end = LocalDate.of(2029, 12, 15);
​// 1、创建Period对象,封装两个日期对象。Period period = Period.between(start, end);
​// 2、通过period对象获取两个日期对象相差的信息。System.out.println(period.getYears());System.out.println(period.getMonths());System.out.println(period.getDays());}
}

十四、JDK8日期(Duration类)

接下来,我们学习Duration类。它是用来表示两个时间对象的时间间隔。可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime、LocalDateTime、Instant等时间

public class Test8_Duration {public static void main(String[] args) {LocalDateTime start = LocalDateTime.of(2025, 11, 11, 11, 10, 10);LocalDateTime end = LocalDateTime.of(2025, 11, 11, 11, 11, 11);// 1、得到Duration对象Duration duration = Duration.between(start, end);
​// 2、获取两个时间对象间隔的信息System.out.println(duration.toDays());// 间隔多少天System.out.println(duration.toHours());// 间隔多少小时System.out.println(duration.toMinutes());// 间隔多少分System.out.println(duration.toSeconds());// 间隔多少秒System.out.println(duration.toMillis());// 间隔多少毫秒System.out.println(duration.toNanos());// 间隔多少纳秒
​}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1411495.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB实现遗传算法优化第三类生产线平衡问题

第三类生产线平衡问题的数学模型 假设&#xff1a; 工作站数量&#xff08;m&#xff09;和生产线节拍&#xff08;CT&#xff09;是预设并固定的。每个任务&#xff08;或作业元素&#xff09;只能分配到一个工作站中。任务的执行顺序是预先确定的&#xff0c;且不可更改。每…

读天才与算法:人脑与AI的数学思维笔记16_音乐图灵测试

1. 艾米 1.1. 人工智能作曲家 1.1.1. 分析机可能会生成任意复杂程度、精细程度的科学的音乐作品 1.1.1.1. 阿达洛夫莱斯 1.1.2. 巴赫的作品是大多数作曲家开始学习创作的起点&#xff0c;也是大多数计算机开始学习作曲的起点…

从零开始学AI绘画,万字Stable Diffusion终极教程(四)

【第4期】图生图 欢迎来到SD的终极教程&#xff0c;这是我们的第四节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在前面的课程中&#xff0c;我…

shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)

目录 一、GeoJSON是什么 二、GeoJSON的结构组成 2.1、点&#xff08;Point&#xff09;数据示例 2.2、线&#xff08;LineString&#xff09;数据示例 2.3、面&#xff08;Polygon&#xff09;数据示例 2.4、特征&#xff08;Feature&#xff09;数据示例 2.5、特征集合&…

开源版本管理系统的搭建一:SVN服务端安装

作者&#xff1a;私语茶馆 1.Windows搭建SVN版本管理系统 点评&#xff1a;SVN本身非常简洁易用&#xff0c;VisualSVN文档支撑非常好&#xff0c;客户端TortoiseSVN非常专业。5星好评。 1.1.SVN概要和组成 背景介绍 Svn是一个开源版本管理系统&#xff0c;由CollabNet公司…

【22-处理不平衡数据集:Scikit-learn中的技术和策略】

文章目录 前言了解不平衡数据集重采样技术过采样欠采样生成合成样本调整类别权重使用适合于不平衡数据集的评估指标结论前言 在机器学习任务中,不平衡数据集是一个非常常见的问题。它指的是数据集中各类别样本数量差异较大,这种情况在现实世界的数据收集中非常普遍,特别是在…

Python机器学习中的异常数据剔除

机器学习中的异常数据剔除 在机器学习中&#xff0c;异常数据可能会对模型的训练和预测产生负面影响。为了提高模型的性能&#xff0c;我们需要在数据预处理阶段剔除异常数据。以下是使用Python剔除异常数据的一些方法&#xff1a; 1. 使用箱线图&#xff08;Boxplot&#xf…

eaapp游戏怎么退款?手把手教你完成eaapp游戏退款的步骤

EA App是一款由全球知名的游戏开发公司Electronic Arts&#xff08;简称EA&#xff09;推出的手机应用程序。它提供了一个平台&#xff0c;允许玩家在手机上访问EA的游戏和服务。EA App的设计理念是为玩家提供一个统一、便捷的方式来享受EA的游戏体验&#xff0c;并与其他玩家互…

二叉树的直径

题目描述&#xff1a;给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root […

基于MATLAB的机器学习和深度学习

书籍&#xff1a;Machine and Deep Learning Using MATLAB 作者&#xff1a;Kamal Al-Malah 出版&#xff1a;WILEY 书籍下载-《基于MATLAB的机器学习和深度学习》本书详细解释了MATLAB工具或应用程序的属性&#xff0c;包括输入和输出参数&#xff0c;通过附带的文本或表格…

分层图像金字塔变压器

文章来源&#xff1a;hierarchical-image-pyramid-transformers 2024 年 2 月 5 日 本文介绍了分层图像金字塔变换器 (HIPT)&#xff0c;这是一种新颖的视觉变换器 (ViT) 架构&#xff0c;设计用于分析计算病理学中的十亿像素全幻灯片图像 (WSI)。 HIPT 利用 WSI 固有的层次结…

Log4Qt日志框架 - 输出日志(01)

一、地址 官网地址&#xff1a;Log4Qt 文档地址&#xff1a;Log4Qt: Main Page 源码&#xff08;Qt4&#xff09;&#xff1a;Log4Qt - Logging for C/Qt download | SourceForge.net 源码&#xff08;Qt5&#xff09;&#xff1a;GitHub - MEONMedical/Log4Qt: Log4Qt - Lo…

计算机的翻译(编译和链接)过程

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C语言基本概念 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697;1.翻译环境和运行环境&#xff1…

Pytorch学习笔记——Torchvision数据集使用

1、Torchvision简介 Torchvision是Pytorch中一个开源的机器学习框架&#xff0c;专门为计算机视觉任务设计和优化。它提供了多种功能来支持计算机视觉项目的开发和实验。 简要来说有如下的功能&#xff1a; 数据加载与处理&#xff1a; Torchvision提供了torchvision.dataset…

Oracle 23c? No Oracle 23ai

昨天 Oracle 发布了最新的Oracle版本。出乎意料的是这个版本从Oracle 23c 更名为 Oracle 23ai &#xff0c;似乎预示着Oracle的掌舵人Larry也要全面拥抱AI技术浪潮了。 23ai版本主要功能介绍: Oracle Database 23ai 是 Oracle 数据库的下一个长期支持版本。它包括 300 多项新功…

架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)

本文首发于公众号&#xff1a;腐烂的橘子 为什么有的架构活动没有正确的目标&#xff1f; 在每个架构活动启动之前&#xff0c;必须有且仅有一个正确的目标&#xff0c;这是架构设计的起点[1]。何为正确&#xff1f;正确就是要与公司的战略目标相匹配。否则系统会变得复杂和无…

Nacos 配置中心实例分析实践

文章目录 Nacos 配置中心实例需求分析/图解在Nacos Server 加入配置创建Nacos 配置客户端模块e-commerce-nacos-config-client5000创建Module修改pom.xml创建application.yml创建bootstrap.yml主启动类业务类测试注意事项和细节 Nacos 配置中心实例 需求分析/图解 在Nacos Ser…

口才训练:如何用声音和语言展现自我魅力

口才训练&#xff1a;如何用声音和语言展现自我魅力 这里有一篇1270字左右的文章&#xff0c;主要介绍如何用声音和语言来展现自我魅力&#xff1a; 口才训练是提升个人魅力的重要途径之一。魅力不仅取决于外表&#xff0c;更重要的是声音和语言的运用。良好的语言表达能力可以…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

C语言 联合和枚举

目录 1. 联合体1.1 联合体类型的声明1.2 联合体变量的创建1.3 联合体的特点1.4 联合体在内存中的存储1.5 联合体使用举例 2. 枚举类型2.1 枚举类型的声明2.2 枚举变量的创建和初始化2.3 枚举类型的大小2.4 枚举类型的优点 正文开始 上次我们通过《C语言 结构体详解》学习了结构…