软件设计之Java入门视频(16)
视频教程来自B站尚硅谷:
尚硅谷Java入门视频教程,宋红康java基础视频
相关文件资料(百度网盘)提取密码:8op3
idea 下载可以关注 软件管家 公众号
学习内容:
该视频共分为1-717部分
本次内容涉及 480-509
在写代码时,总是需要来回切换界面来看代码要求,这里推荐Snipaste,可以把截图以窗口形式放在屏幕上
记录内容:
- SimpleDateFormat
- Calendar
- LocalDate、LocalTime、LocalDateTime
- DateTimeFormatter
- Comparable、Compartor
- 枚举类
1、SimpleDateFormat
1)格式化: 日期-->字符串
2)解析:格式化的逆过程 字符串-->日期
java
package exer;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTimeTest {
@Test
public void testSimpleDateFormat() throws ParseException {
//实例化SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化:
Date date = new Date();
System.out.println(date);//Tue Jul 16 16:55:04 CST 2024
String format = sdf.format(date);
System.out.println(format);//24-7-16 下午4:55
//解析:
String str = "1999-09-03 上午8:10";
Date date1 = sdf.parse(str);
System.out.println(date1);//Fri Sep 03 08:10:00 CST 1999
//******按照指定的方式格式化和解析:调用带参的构造器*********
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
String format1 = sdf1.format(date);
System.out.println(format1);//2024-07-16 04:55:04
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)
Date date2 = sdf1.parse("2024-07-16 04:53:01");
System.out.println(date2);//Tue Jul 16 04:53:01 CST 2024
}
}
将字符串时间转换为java.sql.Date
java
@Test
public void testSimpleDateFormat() throws ParseException {
//******按照指定的方式格式化和解析:调用带参的构造器*********
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)
Date date2 = sdf1.parse("2020-09-08");
java.sql.Date birthDate = new java.sql.Date(date2.getTime());
System.out.println(birthDate);
}
2、Calendar
java
public class DateTimeTest {
@Test
//Calendar:抽象类
public void testCalendar(){
//1、实例化
//方式一:创建其子类(GregorianCalendar)的对象
//方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
//2、常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//一年的第几天
//set()
calendar.set(Calendar.DAY_OF_MONTH,22);
days = calendar.get(Calendar.DAY_OF_MONTH);//修改为22
System.out.println(days);
//add()
calendar.add(Calendar.DAY_OF_MONTH,3);//修改为25
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//getTime()
Date date = calendar.getTime();
System.out.println(date);//Thu Jul 25 17:24:53 CST 2024
//setTime() 日历类-->date
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);//16
}
}
3、 LocalDate、LocalTime、LocalDateTime
java
public class DateTimeTest {
@Test
public void test(){
//now():获取当前日期、时间、日期+时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);//2024-07-16
System.out.println(localTime);//20:32:14.111
System.out.println(localDateTime);//2024-07-16T20:32:14.111
//of():设置指定的年、月、日、时、分、秒、没有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2024, 7, 16, 20, 34, 20);
System.out.println(localDateTime1);//2024-07-16T20:34:20
//getXxx():获取相关的属性
System.out.println(localDateTime.getDayOfYear());
System.out.println(localDateTime.getDayOfMonth());
System.out.println(localDateTime.getDayOfWeek());
System.out.println(localDateTime.getMonth());
System.out.println(localDateTime.getMonthValue());
//体现不可变性:localDate值没变
//withXxx():设置相关的属性
LocalDate localDate1 = localDate.withDayOfMonth(22);
System.out.println(localDate);
System.out.println(localDate1);
//
LocalDateTime localDateTime2 = localDateTime.plusDays(4);
System.out.println(localDateTime);
System.out.println(localDateTime2);
}
}
4、DateTimeFormatter
java
public class DateTimeTest {
@Test
public void test(){
//方式一:预定义标准格式
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化
LocalDateTime localDateTime = LocalDateTime.now();
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str1);
//解析:字符串-->日期
TemporalAccessor parse = formatter.parse("2024-07-16T20:57:50.077");
System.out.println(parse);//{},ISO resolved to 2024-07-16T20:57:50.077
//本地化相关格式:FormatStyle.SHORT、FormatStyle.MEDIUM、FormatStyle.LONG、FormatStyle.FULL
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
//格式化
String str2 = formatter1.format(localDateTime);
System.out.println(str2);//24-7-16 下午9:02
//自定义的格式:如 ofPattern("yyyy-MM-dd hh:mm:ss E")
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String str3 = formatter2.format(localDateTime);
System.out.println(str3);//2024-07-16 09:05:29
}
5、Comparable、Compartor
说明:
Java中的对象,正常情况下,只能进行比较:==或! 不能使用>或<的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable或Compare
Comparable
自然排序
1)像string、包装类等实现了comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式
2)像string、包装类重写compareTo(obj)方法以后,进行了从小到大的排列
3)重写compareTo(obj)的规则:
如果当前对象this大手形参对象obi则返回正整数
如果当前对象this小于形参对象obi则返回负整数
如果当前对象this等于形参对象obi,则返回零。
4)对于自定义来说,如果需要排序,可以让自定义类实现Comparable接口,重写compareTo方法,在该方法下指明如何排序
Compare
定制排序
1)当元素的类型没有实现java.lang.comparable接口而又不方便修改代码或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序
2)重写compare(object o1,object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2:如果返回0,表示相等:返回负整数,表示01小于o2
二者区别:
1)Comparable接口的方式一旦一定,保证comparable接口实现类的对象在任何位置都可以比较大小
2)Comparator接口属于临时性的比较
6、枚举类
枚举类的理解:
1)类的对象只有有限个,确定的,称此类为枚举类
2)当需要定义一组常量时,强烈建议使用枚举类
3)如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
如何定义枚举类
1)方式一:jdk5.0之前,自定义枚举类
2)方式二:jdk5.0可以使用enum关键字定义枚举类
自定义枚举类
java
package exer;
public class SeasonTest {
}
class Season{
//1声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//2私有化类的构造器,给对象属性赋值
public Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3提供当前枚举类的多个对象
public static final Season SPRING = new Season("春天","A");
public static final Season SUMMER = new Season("夏天","B");
public static final Season AUTUMN = new Season("秋天","C");
public static final Season WINTER = new Season("冬天","D");
//4提供toString方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//5提供toString方法
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
enum定义枚举类
java
enum Season{
//1提供当前枚举类的对象,多个对象之间用逗号隔开,末尾对象分号结束
SPRING ("春天","A"),
SUMMER ("夏天","B"),
Season("秋天","C"),
WINTER("冬天","D");
//2声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//3私有化类的构造器,给对象属性赋值
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4提供toString方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
enum类常用方法
1)values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的举值。
2)value0f(string str):可以把一个字符串转为对应的枚举类对象,要求字符串必须是枚举类对
3)tostring():返回当前枚举类对象常量的名称