[Java学习日记]时间类,包装类

目录

一.Date

二.SimpleDateFormat:Date——字符串转换器

三.Calendar:代表日历对象,可单独修改年月日,解决日期表达与变动复杂的问题

四.ZoneID:时区

五.Instance:时间戳(相当于没有时区的Date类)

六.ZonedDateTime

七.DateTimeFormatter(相当于SimpleDateFormat)

八.Local Date|Time|DateTime(日期,时间,时间日期一起):日历类

九.时间工具类:得到时间间隔 Period(年月 )Duration(天小时分秒) ChronoUnit(全)

十.包装类:便于传进函数内(Object参数)

十一.Integer的静态方法

十二.StringBuilder反向插值:十进制转2进制案例


一.Date

1.空参构造Date对象代表队时间是?
2,如何获取和改变Date对象的时间?
3.如何输出时间原点后过一年的时间?set时间值需要注意什么?
public class Demo201 {
    public static void main(String[] args) {
        System.out.println("1.空参构造表示当前系统时间,有参构表示造指定时间");
        Date date1 = new Date();
        System.out.println(date1);
        Date date2 = new Date(0L);
        System.out.println(date2);

        System.out.println("2.通过get与set方法获取和变时间");
        date2.setTime(date1.getTime());
        System.out.println(date2);

        System.out.println("3.打印时间原点开始一年之后的时间:注意加L表示Long类型,不然会越界int类型,过一年就315亿了。");
        System.out.println(new Date(1000L * 60 * 60 * 24 * 365));
    }
}

 


 

二.SimpleDateFormat:Date——字符串转换器

1.空参构造与有参构造的区别?
2.使用什么方法能把Date转变为字符串?
3.有参构造如何代表年月日时分秒?
4.使用什么方法把字符串转变为Date?
public class Demo202 {
    public static void main(String[] args) throws ParseException{
        System.out.println("1.创建这个对象的时候,默认为Java的时间表示形式,传入字符串就用您字符串的表现形式");
        //无参构造
        SimpleDateFormat sdf1 = new SimpleDateFormat();

        System.out.println("2.使用format方法格式化日期,转换为字符串。");
        System.out.println(sdf1.format(new Date()));


        System.out.println("3.字符串对应年月日时分秒(分大小写):yMdHms,只有小时和月份是大写如:\"yyyy年MM月dd日 HH:mm:ss\":老师的说法是:大MM小dd哈哈哈哈哈哈");
        //有参构造
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(sdf2.format(new Date()));
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
        System.out.println(sdf3.format(new Date()));

        System.out.println("4.使用parse方法解析字符串,把字符串变成Date对象");
        String str = "2023-11-11 11:11:11";
        SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf4.parse(str);
        System.out.println(date);
    }
}

 


 

三.Calendar:代表日历对象,可单独修改年月日,解决日期表达与变动复杂的问题

1.如何获取Calendar对象?
2.Calendar类中如何表示月份?(特殊情况)
3.Calendar中如何表示时间?(特殊情况)
4.如何设置Calendar时间?
5.如何获取Calendar所表示的时间?
6.如何使用Calendar输出日期?
7.如何修改日期信息?
8.如何增加或者减少日期?

public class Demo203 {
    public static void main(String[] args) {
        System.out.println("1.这个类是抽象类,不能创建对象,只能用其静态方法获取其子类对象");
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        System.out.println("2.如果是月份:范围是0-11,需要在获取到月份基础上+1");
        System.out.println("3.如果是星期:1代表星期日,2代表星期一,以此往后推");

        System.out.println("4.通过setTime设置时间(通过两种方式:setDate与毫秒值)");
        calendar.setTimeInMillis(0);
        calendar.setTime(new Date());

        System.out.println("5.通过getTime获取时间(Date与毫秒值)");
        System.out.println(calendar.getTimeInMillis());
        System.out.println(calendar.getTime());


        System.out.println("6.使用Calendar输出现在的日期,并且输出星期,通过get方法传入不同参数获取不同数据");
        System.out.println("改进点:定义有序数组存储数据,能够对应不同输出");
        char[] chars = {'日', '一', '二', '三', '四', '五', '六'};
        System.out.println(calendar.get(Calendar.YEAR) + "年" +
                (calendar.get(Calendar.MONTH) + 1) + "月" +
                calendar.get(Calendar.DATE) + "日" +
                " " + "星期" + chars[calendar.get(Calendar.DAY_OF_WEEK)-1]);

        System.out.println("7.通过set方法修改日期信息,可以看看消息提示看看能够传入那些信息(方法的重载)");
        calendar.set(2021,Calendar.OCTOBER,16);
        calendar.set(Calendar.YEAR,2024);
        System.out.println(calendar.get(Calendar.YEAR) + "年" +
                (calendar.get(Calendar.MONTH) + 1) + "月" +
                calendar.get(Calendar.DATE) + "日" +
                " " + "星期" + chars[calendar.get(Calendar.DAY_OF_WEEK)-1]);

        System.out.println("8.通过add方法增加日期,负数为减少日期");
        calendar.add(Calendar.DATE,80);
        System.out.println(calendar.get(Calendar.YEAR) + "年" +
                (calendar.get(Calendar.MONTH) + 1) + "月" +
                calendar.get(Calendar.DATE) + "日" +
                " " + "星期" + chars[calendar.get(Calendar.DAY_OF_WEEK)-1]);
    }
}

 


 

        JDK8以后新增时间类特点:时间不可变,更安全,更简化。

 


 

四.ZoneID:时区

1.如何获取所有时区的数组?
2.如何获取当前系统代表的时区?
3.如何指定时区
public class Demo204 {
    public static void main(String[] args) {
        System.out.println("1.使用静态的getAvailableZoneIds方法获取所有时区");
        System.out.println(ZoneId.getAvailableZoneIds());
        System.out.println("2.使用静态的systemDefault方法获取当前系统默认时区");
        System.out.println(ZoneId.systemDefault());
        System.out.println("3.使用静态的of方法指定时区");
        ZoneId zoneId = ZoneId.of("America/Marigot");
        System.out.println(zoneId);
    }
}

 

 


 

五.Instance:时间戳(相当于没有时区的Date类)

1.如何获取当前时间的instant对象?默认是系统时间还是标准时间?
2.如何设置指定时间的instant对象?
3.如何指定时区,返回ZoneDateTime(相当于Date类)?
4.如何方法比较时间戳,判断时间先后?
5.如何使用增减时间?
public class Demo205 {
    public static void main(String[] args) {
        System.out.println("1.使用静态方法now()获取当前时间的instant对象(默认标准时间)");
        Instant instant = Instant.now();
        System.out.println(instant);

        System.out.println("2.根据ofEpochMilli()方法设置豪秒获得时间的instant对象");
        instant = Instant.ofEpochMilli(1L);
        System.out.println(instant);

        System.out.println("3.使用atZone方法指定时区,返回ZoneDateTime(相当于Date类)");
        ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault());
        System.out.println(zonedDateTime);

        System.out.println("4.使用静态的isbefore方法与isafter方法比较时间戳,判断时间先后");
        Instant instant1 = Instant.ofEpochMilli(0);
        Instant instant2 = Instant.ofEpochMilli(1000);
        System.out.println(instant1.isBefore(instant2));
        System.out.println(instant2.isAfter(instant1));

        System.out.println("5.使用minus与plus增减时间");
        Instant instant3 = instant2.minusSeconds(1);
        Instant instant4 = instant1.plusSeconds(1);
        System.out.println(instant3);
        System.out.println(instant4);
    }
}

 

 


 

六.ZonedDateTime

1.如何获取当前时间?
2.如何获取指定时间?
3.如何通过ZoneId与Instance获取时间?
4.如何改、增减时间?
public class Demo206 {
    public static void main(String[] args) {
        System.out.println("1.使用静态的方法now获取时间");
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println(zonedDateTime);

        System.out.println("2.通过静态的of方法获取指定时间对象");
        ZonedDateTime zonedDateTime1 = ZonedDateTime.of
                (2023,10,24,15,30,0,0, ZoneId.systemDefault());
        System.out.println(zonedDateTime1);

        System.out.println("3.使用静态的ofInstance方法,通过ZoneId与instant获取对象");
        ZonedDateTime zonedDateTime2 = ZonedDateTime.ofInstant(Instant.now(),ZoneId.systemDefault());
        System.out.println(zonedDateTime2);

        System.out.println("4.使用with改、plus增、minus减时间");
        ZonedDateTime zonedDateTime3 = zonedDateTime2.withYear(2024);
        ZonedDateTime zonedDateTime4 = zonedDateTime3.minusYears(1);
        ZonedDateTime zonedDateTime5 = zonedDateTime4.plusYears(1);
        System.out.println(zonedDateTime5);
    }
}

 

 


 

七.DateTimeFormatter(相当于SimpleDateFormat)

如何创建对象?
public class Demo207 {
    public static void main(String[] args) {
        ZonedDateTime zdt = ZonedDateTime.now();
        System.out.println("创建方法:使用静态的ofPattern方法");
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");
        //把时间转换为字符串
        String str = dtf.format(zdt);
        System.out.println(str);
    }
}

 

 


 

八.Local Date|Time|DateTime(日期,时间,时间日期一起):日历类

1.如何创建改对象?
2.如何指定时间创建对象?
3.如何获取属性?
4.如何比较时间
5.如何改动,增删时间?
6.如何把LocalDateTime转变成其他的两个类的对象?
7.什么方法能够判断是否为闰年?
8.使用MonthDay判断今天是否为生日的案例
public class Demo208 {
    public static void main(String[] args) {
        System.out.println("1.使用静态的方法now创建对象");
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        System.out.println("2.使用静态的方法of指定时间创建对象");
        LocalDateTime ldt1 = LocalDateTime.of(2024,10,24,15,50,20);
        System.out.println(ldt1);

        System.out.println("3.通过get获取属性(在这里month与dayOfWeek都是类):");
        System.out.println("获取月份:"+ldt.getMonth().getValue());
        System.out.println("获取星期:"+ldt.getDayOfWeek().getValue());

        System.out.println("4.通过isAfter,isBefore比较时间");
        System.out.println(ldt.isAfter(ldt1));

        System.out.println("5.通过with,plus,minus修改增加减少");
        LocalDateTime ldt2 = ldt1.withYear(2025);
        LocalDateTime ldt3 = ldt1.plusYears(1);
        LocalDateTime ldt4 = ldt1.minusYears(1);

        System.out.println("6.使用toLocal...向下兼容转换");
        LocalDate ld = ldt1.toLocalDate();
        LocalTime lt = ldt1.toLocalTime();
        System.out.println(ld+" "+lt);

        System.out.println("7.使用isLeapYear判断是否为闰年");
        System.out.println(ld.isLeapYear());

        System.out.println("8.案例,判断是否为生日,使用到了MonthDay对象");
        LocalDate localDate = LocalDate.now();
        MonthDay md = MonthDay.from(localDate);
        System.out.println(md);
        MonthDay birthday = MonthDay.of(2,20);
        if (md.equals(birthday)){
            System.out.println("生日快乐");
        }else {
            System.out.println("不生日也快乐");
        }
    }
}

 


 

九.时间工具类:得到时间间隔 Period(年月 )Duration(天小时分秒) ChronoUnit(全)

1.如何使用工具类判断日期,年份,月份的间隔?
2.如何输出数据?
3.Period类在创建对象时与Duration类有什么不一样?
4.如何使用ChronoUnit工具类获取时间不同间隔
public class Demo209 {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        LocalDate birth  = LocalDate.of(2003,6,28);

        System.out.println("1.使用静态方法between获取period对象");
        Period period = Period.between(birth,localDate);
        System.out.println("2.输数据:输出年月日,输出总间隔月份");
        System.out.println(period);
        System.out.println(period.getYears()+"年"+period.getMonths()+"月"+period.getDays()+"日");
        System.out.println(period.toTotalMonths()+"月");


        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDateTime birthday  = LocalDateTime.of(2003,6,28,0,0,0);
        System.out.println("3.使用静态方法between获取period对象,这里不能传LocalDate对象");
        Duration duration = Duration.between(birthday,localDateTime);
        System.out.println(duration);
        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("4.使用ChronoUnit.时间单位.between方法获取时间间隔");
        System.out.println(ChronoUnit.YEARS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.MONTHS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.WEEKS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.DAYS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.HOURS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.MINUTES.between(birthday,localDateTime));
        System.out.println(ChronoUnit.SECONDS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.MILLIS.between(birthday,localDateTime));

        System.out.println(ChronoUnit.HALF_DAYS.between(birthday,localDateTime));
        System.out.println(ChronoUnit.DECADES.between(birthday,localDateTime));
        System.out.println(ChronoUnit.CENTURIES.between(birthday,localDateTime));//世纪
        System.out.println(ChronoUnit.MILLENNIA.between(birthday,localDateTime));//千年
        System.out.println(ChronoUnit.ERAS.between(birthday,localDateTime));//纪元
    }
}

 

 


 

十.包装类:便于传进函数内(Object参数)

//包装类中传入127与传入128,在底层是如何创建对象的?
public class Demo2010 {
    public static void main(String[] args) {
        Integer i1 = 127;
        Integer i2 = 127;
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println("传入127只创建一个对象,传入128创建的是不同对象");
        System.out.println(i1 == i2);
        System.out.println(i3 == i4);
    }
}

 

 


 

十一.Integer的静态方法

如何使用静态方法转换数字成不同进制的字符串?
如何把字符串转换成int类型的数字?
public class Demo2011 {
    public static void main(String[] args) {
        System.out.println("1.使用to...String转不同进制字符串");
        String str = Integer.toBinaryString(Integer.MAX_VALUE);
        System.out.println(str);
        System.out.println(Integer.toOctalString(Integer.MAX_VALUE));
        System.out.println(Integer.toHexString(Integer.MAX_VALUE));

        System.out.println("2.使用parseInt解析字符串转成int,别的包装类也是这样");
        int i = Integer.parseInt("123");
        System.out.println(i);
    }
}

 

 


 

十二.StringBuilder反向插值:十进制转2进制案例

public class Demo2012 {
    public static void main(String[] args) {
        int a = 666;
        System.out.println(Integer.toBinaryString(a));
        int b;
        StringBuilder sb = new StringBuilder();
        System.out.println("使用insert方法可以指定插入位置,如insert(0,参数)可以反向插入");
        while (a !=0) {
            b = a % 2;
            a /= 2;
            sb.insert(0,b);
        }
        System.out.println(sb);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值