目录
4. LocalDate、LocalTime、LocalDateTime类
前言
在程序的开发中我们经常会遇到日期类型的操作,Java对日期类型的操作提供了很好的支持,在最初的版本下,java.lang包中的System.currentTimeMillis(),该方法以毫秒为单位测量,我们通过调用该方法计算某段代码的耗时。
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
long sum = 0;
for (int i = 0; i < 500000; i++) {
sum+=i;
}
System.out.println("sum="+sum);
long endTime = System.currentTimeMillis();
///输出:sum=124999750000 耗时:4ms
System.out.println("耗时:"+(endTime - startTime)+"ms");
}
1. Date类
java.util.Date
类表示特定的瞬间,精确到毫秒。常见的方法如下
方法定义 | 描述 |
Date() | 获取当前日期时间,返回一个代表当前系统时间的Date对象,精确到毫秒 |
Date(long date) | 分配一个Date对象并将其初始化,以表示自标准基准时间“epoch”(即1970年1月1日00:00:00 GMT)以来的指定毫秒数。 |
long getTime() | 返回这个Date对象从1970年1月1日00:00:00 GMT开始的毫秒数。 |
void setTime(long time) | 设置此Date对象以自1970年1月1日00:00:00 GMT之后的时间点,单位为时间毫秒。 |
boolean before(Date when) | 判断此日期是否在指定日期之前,是true,否false |
boolean after(Date when) | 判断此日期是否在指定日期之后,是true,否false |
boolean equals(Object obj) | 判断两个日期值是否相等 |
int compareTo(Date anotherDate) | 比较两个日期进行排序,如果参数Date等于此Date,则值0;如果此Date在Date参数之前,则值为-1;如果此Date在Date参数之后,则值为1; |
String toString() | 将Date对象转为String格式 |
2. SimpleDateFormat类
SimpleDateFormat是抽象类DateFormat的实现类,用于以语言环境敏感的方式格式化和解析日期。它允许格式化(日期→文本)、解析(文本→日期)。
Date and Time Pattern | Result |
"yyyy.MM.dd G 'at' HH:mm:ss z" | 2001.07.04 AD at 12:08:56 PDT |
"EEE, MMM d, ''yy" | Wed, Jul 4, '01 |
"h:mm a" | 12:08 PM |
"hh 'o''clock' a, zzzz" | 12 o'clock PM, Pacific Daylight Time |
"K:mm a, z" | 0:08 PM, PDT |
"yyyyy.MMMMM.dd GGG hh:mm aaa" | 02001.July.04 AD 12:08 PM |
"EEE, d MMM yyyy HH:mm:ss Z" | Wed, 4 Jul 2001 12:08:56 -0700 |
"yyMMddHHmmssZ" | 010704120856-0700 |
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" | 2001-07-04T12:08:56.235-0700 |
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" | 2001-07-04T12:08:56.235-07:00 |
"YYYY-'W'ww-u" | 2001-W27-3 |
常见方法:
public SimpleDateFormat(String pattern)
public String format(Date date): 将Date对象格式化为字符串;
public Date parse(String source):将字符串解析为Date对象;
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// 输出: 2023-09-14 04:09:33
System.out.println("使用指定格式的日期字符串: "+sdf.format(new Date())); //将日期按照指定格式进行格式化
String str = "2023-09-14 04:08:53";
Date date = sdf.parse(str); // 将字符串解析成日期对象
// 输出: Thu Sep 14 04:08:53 CST 2023
System.out.println("日期对象: "+date); // Thu Sep 14 16:05:27 CST 2023
}
3. Calendar类
4. LocalDate、LocalTime、LocalDateTime类
基于Java8之前通常使用Date结合SimpleDateFormat、Calender来处理时间和日期的相关需求,存在明细缺陷,Java8引入java.time包中新增了日期处理相关类。
主要有:
LocalDate:表示日期 //年月日
LocalTime :表示时间 //时分秒
LocalDateTime:表示时间+ 日期 //年月日时分秒
4.1 LocalDate
public static void main(String[] args) {
LocalDate now = LocalDate.now(); //获取当前日期
// 输出:2023-09-14
System.out.println(now);
LocalDate now1 = LocalDate.now(ZoneId.of("Asia/Shanghai")); // 获取当前日期(指定时区)
LocalDate localDate = LocalDate.of(2023, 9, 23); //指定日期
System.out.println(localDate); //2023-09-23
int year = LocalDate.now().getYear(); //获取年份
int monthValue = LocalDate.now().getMonthValue(); //获取月份
Month month = LocalDate.now().getMonth(); //获取月份的枚举值
int dayOfMonth = LocalDate.now().getDayOfMonth(); //获取月份中的第几天
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); //获取现在是星期几
int dayOfYear = LocalDate.now().getDayOfYear(); //获取一年中的第几天
int lengthOfMonth = LocalDate.now().lengthOfMonth(); //获取当月总天数
int lengthOfYear = LocalDate.now().lengthOfYear(); //获取当年总天数
// 获取的值依次为: 2023 9 14 257 THURSDAY 365 30
System.out.println("获取的值依次为: "+year+" " + monthValue+" " + dayOfMonth+" " + dayOfYear +" " + dayOfWeek +" " + lengthOfYear+" " + lengthOfMonth);
System.out.println(LocalDate.now()); //2023-09-14
System.out.println(LocalDate.now().plusDays(1)); //2023-09-15
System.out.println(LocalDate.now().plusWeeks(1)); //2023-09-21
System.out.println(LocalDate.now().plusMonths(1)); //2023-10-14
System.out.println(LocalDate.now().plusYears(1)); //2024-09-14
System.out.println(LocalDate.now().minusDays(1)); //2023-09-13
System.out.println(LocalDate.now().minusWeeks(1)); //2023-09-07
System.out.println(LocalDate.now().minusMonths(1)); //2023-08-14
System.out.println(LocalDate.now().minusYears(1)); //2022-09-14
System.out.println(LocalDate.now()); //2023-09-14
System.out.println(LocalDate.now().withYear(2019)); //2019-09-14
System.out.println(LocalDate.now().withMonth(6)); //2023-06-14
System.out.println(LocalDate.now().withDayOfMonth(1)); //2023-09-01
System.out.println(LocalDate.now().withDayOfYear(1)); //2023-01-01
LocalDate localDate = LocalDate.of(2023, 7, 21);
LocalDate now = LocalDate.now(); //2023-09-14
System.out.println(localDate.isBefore(now)); //是否在某天之前,true
System.out.println(localDate.isAfter(now)); //是否在某天之后,false
System.out.println(localDate.isEqual(now)); //是否在当天,false
System.out.println(localDate.isLeapYear()); //是否是闰年,false
}
4.2 LocalTime
4.3 LocalDateTime