1 时间的基础知识
- 全球有24个时区,每个时区都不一样,为了统一时间设置了全球统一时间UTC(Universal Time Coordinated);
- 格林尼治时间GMT(和全球标准时间一致);
- 北京时间CST(和全球标准时间差8个小时);
- **时间戳:**指的是1970年1月1日到至今的时间,单位毫秒数,也可以为秒;
2 时间处理类
- Jdk8引入了Date-time api 提供了对时间操作的类(加减、格式化、比较…)
- 在时间包java.lang中
- 核心3大类:
LocalDate
LocalTime
LocalDataTime
以LocalDate示例
2.1 常用方法
- LocalDate类是构造方法是私有的不能实例化,但是LocalDate提供了静态方法返回LocalDate对象
返回LocalDate对象的静态方法
方法 | 描述 |
now() | 获取当前时间的对象 |
now(int year ,int month ,int day) | 获取当前时间的对象 |
of (int year ,int month ,int day) | 获取指定的时间的对象 |
plusYears(long yearsToAdd) | 当前日期对象上加一年 |
plusMonths(long monthsToAdd) | 前日期对象上加一月 |
plusWeeks(long WeeksToAdd) | 前日期对象上加一周 |
plusDays(long WeeksToAdd) | 前日期对象上加一天 |
minusYears(long YearsToSubtract) | 当前日期对象上减一年 |
minusMonths(long MonthsToSubtract) | 前日期对象上减一月 |
minusWeeks(long weeksToSubtract) | 前日期对象上减一周 |
minusDays(long DaysToSubtract) | 前日期对象上减一天 |
返回对象的普通方法
方法 | 描述 |
LocalDate withYear(int a) | 为LocalDate对象设定一个年份,并返回一个LocalDate对象 |
LocalDate withMonth(int a) | 为LocalDate对象设定一个月份,并返回一个LocalDate对象 |
LocalDate withDayOfMonth(int a) | 设置月数的第几天,并返回一个LocalDate对象 |
LocalDate withDayOfyears(int a) | 设置年份的第几天,并返回一个LocalDate对象 |
对日期对象进行操作
方法 | 描述 |
int getyear() | 获取日期对象的年份 |
Month getMonth() | 返回一个month对象 |
int getMonthValue() | 返回日期对象的月份 |
int getDayOfMonth() | 返回该日期对象的月份是第几天 |
int getDayOfYear() | 返回该日期对象的年是第几天 |
boolean isAfter(ChronoLocalDate other) | 判断这个日期是否在other之后 |
boolean isBeforce(ChronoLocalDate other) | 判断这个日期是否在other之前 |
boolean isEquals(ChronoLocalDate other) | 判断这个日期是否和other相等 |
示例
package FileDemo;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.io.*;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
public class StreamDemo {
public static void main(String[] args) throws IOException {
//获取当前时间的日期对象
LocalDate now = LocalDate.now();
System.out.println(now);
System.out.println("==================================");
//当前日期为加上2年
LocalDate localDate = now.plusYears(2);
System.out.println("当前日期为加上2年是"+localDate);
System.out.println("==================================");
//当前日期为加上5个月
LocalDate localDate1 = now.plusMonths(5);
System.out.println("当前日期为加上5个月是"+localDate1);
System.out.println("==================================");
//当前日期为加上5个星期
LocalDate localDate2 = now.plusWeeks(5);
System.out.println("当前日期为加上5个星期是"+localDate2);
System.out.println("==================================");
//当前日期为加上5天
LocalDate localDate3 = now.plusDays(5);
System.out.println("当前日期为加上5天是"+localDate3);
System.out.println("==================================");
//指定的日期对象
LocalDate of = LocalDate.of(1995, 10, 10);
//为这个日期的减少5年
LocalDate localDate4 = of.minusYears(5);
System.out.println("当前日期为减上5天是"+localDate4);
System.out.println("==================================");
//为这个日期的减少10个月
LocalDate localDate5 = of.minusMonths(10);
System.out.println("当前日期为减上10个月是"+localDate5);
System.out.println("==================================");
//为这个日期减少20周
LocalDate localDate6 = of.minusWeeks(20);
System.out.println("当前日期为减上20个周是"+localDate6);
System.out.println("==================================");
//为这个日期减少100天
LocalDate localDate7 = of.minusDays(100);
System.out.println("当前日期为减上20个周是"+localDate7);
System.out.println("==================================");
//修改当前日期的年份
LocalDate dates=LocalDate.now();
//`修改当前日期为1995年
LocalDate date = dates.withYear(1995);
System.out.println("修改年份为1995年"+date);
System.out.println("==================================");
//修改月份为7月
LocalDate localDate8 = date.withMonth(7);
System.out.println("修改月份为7月"+localDate8);
System.out.println("==================================");
//修改当前月份的13日
LocalDate localDate9 = date.withDayOfMonth(13);
System.out.println("修改月份为13日"+localDate9);
System.out.println("==================================");
//修改当前年份的第1天;
LocalDate localDate10 = localDate9.withDayOfYear(1);
System.out.println("修改年份的第1天"+localDate10);
System.out.println("==================================");
//以localDate对象为例调用方法
int year = localDate10.getYear();
System.out.println(year);
int monthValue = localDate10.getMonthValue();
System.out.println(monthValue);
int dayOfMonth = localDate10.getDayOfMonth();
System.out.println(dayOfMonth);
int dayOfYear = localDate10.getDayOfYear();
System.out.println(dayOfYear);
System.out.println("==================================");
LocalDate of1 = LocalDate.of(1995, 8, 06);
LocalDate of2 = LocalDate.of(1995, 7, 13);
boolean before = of1.isBefore(of2);
System.out.println(before);
boolean after = of1.isAfter(of2);
System.out.println(after);
boolean equal = of1.isEqual(of2);
System.out.println(equal);
}
}
3 时间格式化
3.1 DateTimeFormatter
- DateTimeFormatter是线程是安全的
示例
package FileDemo;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StreamDemo {
public static void main(String[] args) throws IOException {
LocalDateTime now = LocalDateTime.now();
//获取DateTimeFormatter实例
DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//调用format方法
String format = dateTimeFormatter.format(now);
System.out.println(format);
}
}
4 Duration
- 计算时间差的类
实例
package FileDemo;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.io.*;
import java.time.*;
import java.time.format.DateTimeFormatter;
public class StreamDemo {
public static void main(String[] args) throws IOException {
LocalDateTime now = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(1995, 12, 23,12,12,12);
//第二个减去第一个
Duration duration =Duration.between(of,now);
System.out.println("当前时间与of的天数差是"+duration.toDays());
System.out.println("当前时间与of的小时差是"+duration.toHours());
System.out.println("当前时间与of的分钟数差是"+duration.toMinutes());
System.out.println("当前时间与of的秒数差是"+duration.toMillis());
}
}