目录
2 SimpleDateFormat类【使String与Date完成互转】
1.Date应用
-
计算机中时间原点
1970年1月1日 00:00:00
-
时间换算单位
1秒 = 1000毫秒
-
Date类概述
Date 代表了一个特定的时间,精确到毫秒
-
Date类构造方法
方法名 说明 public Date() 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
【把当前时间封装成Date对象】
public Date(long date) 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
【把指定时间封装成Date对象】
/* Date类的空参数构造方法 Date() 获取当前电脑系统的日期和时间 */ private static void demo01() { Date date = new Date(); System.out.println(date);//Sun Aug 08 12:23:03 CST 2088 //对date对象进行重写,使其输出对象名时,输出的不再是地址值,而是日期 }
-
/* Date类的带参数构造方法 把指定时间封装成Date对象 Date(long date) :传递毫秒值,把毫秒值转换为Date日期 从时间原点开始经历此毫秒值之后的时间 */ private static void demo02() { Date date = new Date(0L); System.out.println(date);// Thu Jan 01 08:00:00 CST 1970 因为地理位置是在中国东八区,所以默认加8小时 date = new Date(3742767540068L); System.out.println(date);// Sun Aug 08 09:39:00 CST 2088 //从1970年1月1号早上八点经历此毫秒值之后的时间 date = new Date(3600*1000); System.out.println(date);// Thu Jan 01 09:00:00 CST 1970 //从1970年1月1号早上八点经历此毫秒值之后的时间,经历1小时候为早上九点 }
常用方法
方法名 说明 public long getTime() 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 public void setTime(long time) 设置时间,给的是da
public class DateDemo2 {
public static void main(String[] args) {
// public long getTime() 获取时间对象的毫秒值
// public void setTime(long time) 设置时间,传递毫秒值
//method1();
//method2();
}
private static void method2() {
Date date1 = new Date();
date1.setTime(0L);
System.out.println(date1); 显示时间原点1970.1.1 8点
}
private static void method1() {
//把当前时间封装成一个date对象
Date date1 = new Date();
//获取这个date对象的毫秒值 --- 获取当前时间的毫秒值
long time = date1.getTime();
System.out.println(time);
long time2 = System.currentTimeMillis();
System.out.println(time2);
}
}
2 SimpleDateFormat类【使String与Date完成互转】
-
SimpleDateFormat类概述
对Date对象,进行格式化和解析 eg: Thu Jan 01 08:00:00 CST 1970 转成 1970.01.01
常用的模式字母:区分大小写的 y 年 M 月 d 日 H 时 m 分 s 秒 写对应的模式,会把模式替换为对应的日期和时间 "yyyy-MM-dd HH:mm:ss" 注意: 模式中的字母不能更改,但连接模式的符号可以改变 "yyyy年MM月dd日 HH时mm分ss秒" 比如把“——”换成年
-
SimpleDateFormat类构造方法
方法名 说明 public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式 public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 -
SimpleDateFormat类的常用方法
-
格式化(从Date到String)
-
public final String format(Date date):将日期格式化成日期/时间字符串
-
-
解析(从String到Date)
-
public Date parse(String source):从给定字符串的开始解析文本以生成日期
public class DateDemo3 { 【格式化】 public static void main(String[] args) { //public final String format(Date date):将日期格式化成日期/时间字符串 //当前时间的Date对象 Date date = new Date(); //创建了一个日期格式。 //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String result1 = sdf.format(date); System.out.println(result1); //2021-08-31 不同格式打印结果不一 } }
public class DateDemo4 { 【解析】 public static void main(String[] args) throws ParseException { //public Date parse(String source):从给定字符串的开始解析文本以生成日期 String s = "2048-01-01"; //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(s); System.out.println(date); } }
-
-
String的日期格式一定要与SimpleDateFormat(String pattern)的格式一样,否则报错
JDK8新增日期类
Date被细分为三种 ,主要用LocalDateTime
LocalDateTime创建方法
方法说明
方法名 | 说明 |
---|---|
public static LocalDateTime now() | 获取当前系统时间 |
public static LocalDateTime of (年, 月 , 日, 时, 分, 秒) | 使用指定年月日和时分秒初始化一个LocalDateTime对象 |
在原本的Date类下对象对应的LocalDateTime方法
public class JDK8DateDemo2 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(localDateTime);
}
执行结果:
2021-08-31T17:01:11.715
2020-11-11T11:11:11
LocalDateTime获取方法
-
方法说明
方法名 说明 public int getYear() 获取年 public int getMonthValue() 获取月份(1-12) public int getDayOfMonth() 获取月份中的第几天(1-31) public int getDayOfYear() 获取一年中的第几天(1-366) public DayOfWeek getDayOfWeek() 获取星期 public int getMinute() 获取分钟 public int getHour() 获取小时
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 20);
//public int getYear() 获取年
int year = localDateTime.getYear();
System.out.println("年为" +year); //年为2020
//public int getMonthValue() 获取月份(1-12)
int month = localDateTime.getMonthValue();
System.out.println("月份为" + month); //月份为11
Month month1 = localDateTime.getMonth();
// System.out.println(month1);
//public int getDayOfMonth() 获取月份中的第几天(1-31)
int day = localDateTime.getDayOfMonth();
System.out.println("日期为" + day); //日期为11
//public int getDayOfYear() 获取一年中的第几天(1-366)
int dayOfYear = localDateTime.getDayOfYear();
System.out.println("这是一年中的第" + dayOfYear + "天"); //这是一年中的第316天
//public DayOfWeek getDayOfWeek()获取星期
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
System.out.println("星期为" + dayOfWeek); //星期为WEDNESDAY
//public int getMinute() 获取分钟
int minute = localDateTime.getMinute();
System.out.println("分钟为" + minute); //分钟为11
//public int getHour() 获取小时
int hour = localDateTime.getHour();
System.out.println("小时为" + hour); //小时为11
执行结果:
年为2020
月份为11
日期为11
这是一年中的第316天
星期为WEDNESDAY
分钟为11
小时为11
LocalDateTime转换方法
-
方法说明
方法名 说明 public LocalDate toLocalDate () 转换成为一个LocalDate对象 public LocalTime toLocalTime () 转换成为一个LocalTime对象
LocalDateTime localDateTime = LocalDateTime.of(2020, 12, 12, 8, 10, 12);
//public LocalDate toLocalDate () 转换成为一个LocalDate对象
LocalDate localDate = localDateTime.toLocalDate();
System.out.println(localDate); //2020-12-12
//public LocalTime toLocalTime () 转换成为一个LocalTime对象
LocalTime localTime = localDateTime.toLocalTime();
System.out.println(localTime); //08:10:12
LocalDateTime格式化和解析
方法名 | 说明 |
---|---|
public String format (指定格式) | 把一个LocalDateTime格式化成为一个字符串 |
public LocalDateTime parse (准备解析的字符串, 解析格式) | 把一个日期字符串解析成为一个LocalDateTime对象 |
public static DateTimeFormatter ofPattern(String pattern) | 使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象 |
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
System.out.println(localDateTime); //2020-11-12T13:14:15
//public String format (指定格式) 把一个LocalDateTime格式化成为一个字符串
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String s = localDateTime.format(pattern);
System.out.println(s); //2020年11月12日 13:14:15
//public static LocalDateTime parse (准备解析的字符串, 解析格式) 把一个日期字符串解析成为一个LocalDateTime对象
String s = "2020年11月12日 13:14:15";
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse(s, pattern);
System.out.println(parse); //2020-11-12T13:14:15
LocalDateTime增加或者减少时间的方法
-
方法说明
方法名 说明 public LocalDateTime plusYears (long years) 添加或者减去年 public LocalDateTime plusMonths(long months) 添加或者减去月 public LocalDateTime plusDays(long days) 添加或者减去日 public LocalDateTime plusHours(long hours) 添加或者减去时 public LocalDateTime plusMinutes(long minutes) 添加或者减去分 public LocalDateTime plusSeconds(long seconds) 添加或者减去秒 public LocalDateTime plusWeeks(long weeks) 添加或者减去周
//public LocalDateTime plusYears (long years) 添加或者减去年
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
//LocalDateTime newLocalDateTime = localDateTime.plusYears(1);
//System.out.println(newLocalDateTime);
LocalDateTime newLocalDateTime = localDateTime.plusYears(-1);
System.out.println(newLocalDateTime); //2019-11-11T13:14:15
LocalDateTime减少或者增加时间的方法
-
方法说明
方法名 说明 public LocalDateTime minusYears (long years) 减去或者添加年 public LocalDateTime minusMonths(long months) 减去或者添加月 public LocalDateTime minusDays(long days) 减去或者添加日 public LocalDateTime minusHours(long hours) 减去或者添加时 public LocalDateTime minusMinutes(long minutes) 减去或者添加分 public LocalDateTime minusSeconds(long seconds) 减去或者添加秒 public LocalDateTime minusWeeks(long weeks) 减去或者添加周
//public LocalDateTime minusYears (long years) 减去或者添加年
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
//LocalDateTime newLocalDateTime = localDateTime.minusYears(1);
//System.out.println(newLocalDateTime);
LocalDateTime newLocalDateTime = localDateTime.minusYears(-1);
System.out.println(newLocalDateTime); //2021-11-11T13:14:15
LocalDateTime修改方法
-
方法说明
方法名 说明 public LocalDateTime withYear(int year) 直接修改年 public LocalDateTime withMonth(int month) 直接修改月 public LocalDateTime withDayOfMonth(int dayofmonth) 直接修改日期(一个月中的第几天) public LocalDateTime withDayOfYear(int dayOfYear) 直接修改日期(一年中的第几天) public LocalDateTime withHour(int hour) 直接修改小时 public LocalDateTime withMinute(int minute) 直接修改分钟 public LocalDateTime withSecond(int second) 直接修改秒
//public LocalDateTime withYear(int year) 修改年
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
// LocalDateTime newLocalDateTime = localDateTime.withYear(2048);
// System.out.println(newLocalDateTime);
LocalDateTime newLocalDateTime = localDateTime.withMonth(20);
System.out.println(newLocalDateTime); //报错
Period
-
方法说明
方法名 说明 public static Period between(开始时间,结束时间) 计算两个“时间"的间隔 public int getYears() 获得这段时间的年数 public int getMonths() 获得此期间的总月数 public int getDays() 获得此期间的天数 public long toTotalMonths() 获取此期间的总月数
//public static Period between(开始时间,结束时间) 计算两个"时间"的间隔
LocalDate localDate1 = LocalDate.of(2020, 1, 1);
LocalDate localDate2 = LocalDate.of(2048, 12, 12);
Period period = Period.between(localDate1, localDate2);
System.out.println(period);//P28Y11M11D
//public int getYears() 获得这段时间的年数
System.out.println(period.getYears());//28
//public int getMonths() 获得此期间的月数
System.out.println(period.getMonths());//11
//public int getDays() 获得此期间的天数
System.out.println(period.getDays());//11
//public long toTotalMonths() 获取此期间的总月数
System.out.println(period.toTotalMonths());//347
Duration
-
方法说明
方法名 说明 public static Durationbetween(开始时间,结束时间) 计算两个“时间"的间隔 public long toSeconds() 获得此时间间隔的秒 public int toMillis() 获得此时间间隔的毫秒 public int toNanos() 获得此时间间隔的纳秒
//public static Duration between(开始时间,结束时间) 计算两个“时间"的间隔
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 1, 1, 13, 14, 15);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 1, 2, 11, 12, 13);
Duration duration = Duration.between(localDateTime1, localDateTime2);
System.out.println(duration);//PT21H57M58S
//public long toSeconds() 获得此时间间隔的秒
System.out.println(duration.toSeconds());//79078
//public int toMillis() 获得此时间间隔的毫秒
System.out.println(duration.toMillis());//79078000
//public int toNanos() 获得此时间间隔的纳秒
System.out.println(duration.toNanos());//79078000000000