如果想观看更多Java内容 可上我的个人主页关注我,地址
子逸爱编程-CSDN博客https://blog.csdn.net/a15766649633?spm=1011.2415.3001.5343 使用工具 IntelliJ IDEA Community Edition 2023.1.4
使用语言 Java8
代码能力快速提升小方法,看完代码自己敲一遍,十分有用
目录
1.日期类
1.1 日期类简述
在程序开发中经常会遇到日期类的操作,在JDK1.8之前的版本中,所有关于时间和日期的API在使用上都存在缺陷。
- 易用性差,时间的计算方式烦琐;
- 不是线程安全的;
基于以上问题,JDK1.8引入了一套全新的时间日期API,借助新的API可以用更简洁的方法处理时间和日期。
1.2 处理时间和日期的方法
1.2.1 创建日期对象
在JDK1.8中,日期和时间的类都位于java.time包中,它是新的Java日期/时间API的基础包,这些类都是不可变的、线程安全的,在绝大多数情况下,这些类能够有效地处理一些公共的需求,java.time包中表示的日期常用类如下所示:
日期常用类:
LocalDate | 表示日期(年/月/日),不包含时间,如2024-3-18; |
LocalTime | 表示时间(时/分/秒/毫秒),不包含日期,如15:32:12; |
LocalDateTime | 表示日期和时间(年/月/日/时/分/秒/毫秒),如2024-3-18 15:32:12; |
LocalDate类、LocalTime类、LocalDateTime类的实例是不可变的对象,它提供了简单的日期或时间,并不包含时间信息,也不包含与时区相关的信息。日期类的通用方法如下:
日期类的通用方法:
日期类 now() | 静态方法,根据当前时间创建对象,返回日期对象; |
日期类 of(int year,Month month,int dayOfMonth) | 静态方法,根据指定日期/时间创建日期类对象,如LocalDate.of(2021,Month.APRIL,4); |
Month getMonth() | 获取月份,返回Month,是一个表示月份的枚举; 如果想获取阿拉伯数字,可以使用枚举的下标+1就可获取阿拉伯数字的月份; |
int getDayOfMonth() | 返回当前日期类对象的月份天数; |
int getYear() | 返回当前日期类对象的年份; |
日期类 plusDays() 日期类 plusWeeks() 日期类 plusMonths() 日期类 plusYears() | 在指定日期的基础上添加天数、周数、月数、年数。返回日期类对象; |
获取星期几的方法
DayOfWeek a=日期类对象.getDayOfWeek();
然后直接System.out.println()打印即可
将字符串转为日期
日期类 parse(String local);
UnsupportedOperationException为日期异常
以上方法中的日期类指LocalDate、LocalTime、LocalDateTime等类型。运用这些类,可以实现获取时间类对象。例如,获取当前日期或时间的代码如下:
LocalDate localDate=LocalDate.now();//获取当前日期
LocalTime localTime=LocalTime.now();//获取当前时间
1.2.2 日期格式化
有时需要按照定义的格式输出系统时间,这就需要使用DataTimeFormatter类的相关方法进行日期格式化处理,该类位于java.time.format包中。日期类中的format()方法用于将日期格式化为字符串,该方法接收一个DateTimeFormatter对象,除此之外,DateTimeFormatter类的format()方法也可以实现日期格式化。示例代码如下:
运行代码
运行结果
在以上代码中,ofPattern()方法用于指定日期格式。参数为格式字符串,该方法的作用是指定日期的输出格式。
1.3 日期类贯穿案例
1.3.1 要求
根据当前日期,计算农场下次播种时间的收割时间,要求如下;
使用不同格式输出当前日期,如"yyyy年MM月dd日 HH:mm:ss" "yyyy-MM-dd";
分别提取当前日期对应的年、月、日信息并输出;
输入当前日期距离下次播种还有几个月,计算并输出下次播种时间;
输入收割时间,并输出到控制台 ;
1.3.2 运行代码
public class LocalTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.now();
try {
String thisLocalDateTime = localDateTime.format(formatter1);//获取当前详细时间
System.out.println("当前日期(日期+时间):" + thisLocalDateTime);
String thisLocalDate = localDateTime.format(formatter2);//获取当前日期
System.out.println("当前日期:" + thisLocalDate);
System.out.println("年:" + localDateTime.getYear() + " 月:" + localDateTime.getMonth() + " 日:" + localDateTime.getDayOfMonth());
System.out.println("距离下次播种大约还有几个月?(1~12间的整数):");
LocalDateTime localDateTime1 = localDateTime.plusMonths(input.nextInt());//添加月份
String nextTime = localDateTime1.format(formatter1);//获取下次播种时间
System.out.println("下次播种时间约为:" + nextTime);
System.out.println("请输入计划开始收割日期(格式:yyyy-MM-dd):");
localDate = LocalDate.parse(input.next());//将字符串转换为日期
} catch (InputMismatchException e) {
System.out.println("您的日期输入有误,已退出程序!");
} catch (UnsupportedOperationException ex) {
System.out.println("您输入的时间有误!");
} catch (Exception e) {
System.out.println("发生其他异常!");
} finally {
String thisLocalDate = localDate.format(formatter2);//获取当前日期
System.out.println("收割开始日期为" + thisLocalDate + ",预祝好收成!");
}
}
}
1.3.3 运行结果
2.Random类
2.1 Random的构造方法
在项目开发中,经常需要使用随机数值,例如,网站登录中的验证码,或者需要以一定概率实现的某种效果(如游戏程序中的物品掉落等),就需要Java提供的Random类,该类用于生成随机数。它位于java.util包中,每当需要以任意或非系统方式生成数字时就使用此类。使用Math类的Random()方法也可以产生随机数。其实,Math类的Random()方法的底层就是使用Random类实现的。该类的构造方法有两种重载方法。
Random()
创建一个随机数生成器;
Random(long seed)
使用单个long种子创建一个随机数生成器 ;
2.2 Random的重载方法
Random类定义了很多用于获取随机数的方法,最常用的是nextInt()方法,它返回下一个int类型的伪随机数,有如下两个重载方法:
int nextInt();
int nextInt(int n);
其中,前者返回下一个伪随机数,它是此随机数生成器序列中均匀分布的int值;后者返回下一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值n(不包括)之间均匀分布的int值。(跟List集合中是subList一样,不过它只用一个不包含的值(就是从0开始到n值前一个数字随机));
2.3 Random贯穿案例
运行代码
public class RandomTest {
public static void main(String[] args) {
Random random=new Random();
for (int i = 0; i < 10; i++) {//生成10个随机数
int number= random.nextInt(10);
System.out.println(number);
}
}
}
运行结果
2.4 Random的其他功能和底层介绍
Random类还定义了得到long型、boolean型、float型等伪随机数的方法。具体用法可查看API帮助文档。
- 计算机不能产生绝对的随机数,只能产生伪随机数。"伪"的意思是并非真正的随机,而是有规律的,伪随机数实际上就是计算机通过系统的随机数算法计算得出的有规律的“随机数”,可以把这个算法看成异常黑盒子,种子可被认为是放入黑盒子中参与计算的一个参数。
- 如果用同样的一个种子值来初始化两个Random对象,用每个对象调用相同的方法,得到的随机数都是相同的。未设置种子值时,默认使用当前时间作为种子。