String、StringBuffer、StringBuilder的区别
String使用的陷阱:String一经初始化后,就不会在改变其内容了。对String字符串 的操作实际上对其副本(原始拷贝)的操作,原来的字符串一点都没有改变。
StringBuffer类是对原字符串本身操作的,可以对字符串进行修改而不产生副 本拷贝。可以在循环中使用。
String:不可变字符序列;
StringBuffer:可变字符序列,并且线程安全,但是效率低;
StringBuilder:可变字符序列,线程不安全,但是效率高(一般用他!);
时间处理相关类:
Date类的基本使用:
//实际上在Date无参构造方法中其实调用了System.currentTimeMillis()方法
Date date=new Date();
System.out.println(date);
/*有参构造方法中实际上返回一个格式为Thu Jan 01 08:00:00 CST 1970的值,由于中 国位于东八区,只要传入的参数为整数,都是返回一样的值*/
Date date1=new Date(1);
System.out.println(date1);
Date类中的getTime()和setTime():
/*getTime()返回的是与January 1, 1970, 00:00:00 GMT的milliseconds(毫秒)差,即返 回的是一个数值 */
System.out.println(date.getTime());
//setTime()设置的是与January 1, 1970, 00:00:00 GMT的milliseconds(毫秒)差
date.setTime(1);
System.out.println(date.getTime());
格式器SimpleDateFormat:
Date date=new Date();
//首先使用SimpleDateFormat对时间输出格式确定化
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//使用SimpleDateFormat中的format方法对Date类型的时间格式化
String s=simpleDateFormat.format(date);
System.out.println(s);
//即可输出格式为yyyy/MM/dd HH:mm:ss的时间类型
/**
* 自己定义一个字符串并且按照某种格式输出
*/
/**
* 在中SimpleDateFormat具体实现
*/
//如何自己自定义一个日期,使之按照某种格式输出来
String s1="1222/11/11 11:11:11";
//DateFormat是SimpleDateFormat的父类
DateFormat df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//其中s1的格式必须与SimpleDateFormat中给与的格式一致否则就会出现异常
System.out.println(df.parse(s1));
/*在这里使用parse这里有异常,所以必须对异常进行处理,此处我直接抛出异常,当然 也可以对异常进行捕获 */
System.out.println(simpleDateFormat.parse(s1));
/**
* 在中LocalDateTime具体实现
*/
String str="2020-10-12 21:04:02";
System.out.println(LocalDateTime.parse(str, dfm)); /*按照yyyy/MM/dd HH:mm:ss格式输出结果*/
System.out.println(LocalDateTime.parse(str, dfm).getDayOfMonth()); /*输出一个月的哪一天*/
System.out.println(LocalDateTime.parse(str, dfm).getDayOfWeek()); /*输出一周中的礼拜几*/
System.out.println(LocalDateTime.parse(str, dfm).getDayOfYear()); /*属于位于该一年中第几天*/
/**
* LocalTime、LocalDate、LocalDateTime类的基本使用
*/
//使用LocalTime,返回的是例如此类型:20:25:43.084
System.out.println(LocalTime.now());
//使用LocalDate,返回的是例如此类型:2020-10-12
System.out.println(LocalDate.now());
//使用LocalDateTime,返回的是例如此类型:2020-10-12T20:29:13.343
System.out.println(LocalDateTime.now());
//自定义一个年月日的时间,其中不包含时分秒
LocalDate ll=LocalDate.of(1999,1,21);
//由于Month是枚举类型,所以即可通过Month.月份对其月份赋值
LocalDate l2=LocalDate.of(1999, Month.APRIL,21);
System.out.println(ll.toString()); //Month类中已经重写了toString()方法
//这里的Month是一个枚举类型,即Month中含有1-12月的英文值
//通过LocalDate对象获取month的值
System.out.println(ll.getMonth()); //输出JANUARY
//自定义一个时分秒的时间,其中不包含年月日
//其中LocalTime中含有两个off方法,即构成了方法的重载
LocalTime lt1=LocalTime.of(11,13); //时分
System.out.println(lt1.getHour()); //11
System.out.println(lt1.getMinute()); //13
LocalTime lt2=LocalTime.of(11,12,1); //时分秒
System.out.println(lt2.getSecond()); //1
SimpleDateFormat与DateTimeFormat格式化的区别:
/**
* DateTimeFormat格式化
*/
/*按照yyyy-MM-dd HH:mm:ss格式对从LocalDateTime得到的时间进行格式化,不满足该格式的都会出现UnsupportedTemporalTypeException异常 */
DateTimeFormatter dfm=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt=LocalDateTime.now();
System.out.println(ldt.format(dfm));
DateTimeFormatter dfm2=DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime localTime=LocalTime.now();
//此处为SimpleDateFormat的主要区别
System.out.println(localTime.format(dfm2));
/*DateTimeFormat格式化是将该类的对象作为参数传入format()方法中,而SimpleDateFormat是将直接用该类的对象调用format()方法 */
/*Date中没有now方法,但是可以通过调用其无参构造函数获取当前时间,然而LocalTime里面有now方法,即可以使用该方法获取当前的时间 */
/*LocalDateTime里面的构造方法是私有化的,所以不可通过构造方法对其赋值,但是可以通过of()方法【手动给值】以及.now()方法【获取系统当前时间的值】进行赋值 */
/**
* SimpleDateFormat格式化
*/
Date date=new Date();
//首先使用SimpleDateFormat对时间输出格式确定化
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//使用SimpleDateFormat中的format方法对Date类型的时间格式化
String s=simpleDateFormat.format(date);
System.out.println(s);
//即可输出格式为yyyy/MM/dd HH:mm:ss的时间类型
/*计算生日日期与现在经历过几年几月几天 */
LocalDate today=LocalDate.now();
LocalDate birthday=LocalDate.of(1998,07,10);
Period period=Period.between(birthday, today);
System.out.println(Period.between(birthday, today));
System.out.println(period.getYears()); //输出相差的年数
System.out.println(period.getDays()); //相差的天数
System.out.println(period.getMonths()); //相差的月数
LocalDate start=LocalDate.of(1998,7,7);
LocalDate end=LocalDate.of(1999,9,7);
//计算两个时间是否之间时间的差异,并且输出所差异的年数
long l=ChronoUnit.YEARS.between(start,end);
System.out.println(l); //1
System.out.println(ChronoUnit.MONTHS.between(start, end)); //14 两个时间相差的月份
System.out.println(ChronoUnit.DAYS.between(start, end)); //427 两个时间相差的天数
/*计算生日日期与现在经历过几年几月几天 */
LocalDate today=LocalDate.now(); //2020-10-12
LocalDate birthday=LocalDate.of(1998,07,20);
//时期间隔 年月日
Period period=Period.between(birthday, today);
System.out.println(Period.between(birthday, today));
System.out.println(period.getYears()); //22 输出相差的年数
System.out.println(period.getMonths()); //2 相差的月数
System.out.println(period.getDays()); //22 相差的天数
LocalDate start=LocalDate.of(1998,7,7);
LocalDate end=LocalDate.of(1999,9,7);
//计算两个时间是否之间时间的差异,并且输出所差异的年数
//期量单位 间隔
long l=ChronoUnit.YEARS.between(start,end);
System.out.println(l); //1
System.out.println(ChronoUnit.MONTHS.between(start, end)); //14 两个时间相差的月数
System.out.println(ChronoUnit.DAYS.between(start, end)); //427 两个时间相差的天数