目录
二.SimpleDateFormat:Date——字符串转换器
三.Calendar:代表日历对象,可单独修改年月日,解决日期表达与变动复杂的问题
七.DateTimeFormatter(相当于SimpleDateFormat)
八.Local Date|Time|DateTime(日期,时间,时间日期一起):日历类
九.时间工具类:得到时间间隔 Period(年月 )Duration(天小时分秒) ChronoUnit(全)
十二.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);
}
}