天天看点

String、StringBuffer、StringBuilder的区别以及Date中常用类

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  两个时间相差的天数