1. 时间日期类
计算机中的时间原点:1970年1月1日 00:00:00
北京时间需要在世界标准时间上加8小时
1.1 Date类:
Date类概述:Date 代表了一个特定的时间,精确到毫秒
Date构造方法:
- public Date() :电脑中的当前时间
- public Date(long date) :从计算机时间原点开始,经过指定毫秒的时间
Date常用方法:
- public long getTime() 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
- public void setTime(long time) 设置时间,传入参数是毫秒值
示例代码:
public static void main(String[] args) {
//构造方法
Date d1 = new Date();//当前电脑中的时间
Date d2 = new Date(0L);//计算机时间原点
Date d3 = new Date(1000L * 60*60);//计算机时间原点经过1小时的时间
System.out.println(d3);//Thu Jan 01 09:00:00 CST 1970(北京时间加8小时)
//常用方法getTime
long time2 = d2.getTime();//从计算机时间原点到d2的时间,毫秒值
long tiem3 = d3.getTime();//从计算机时间原点到d3的时间,毫秒值
System.out.println(tiem3-time2);//3600000
//常用方法setTime
System.out.println("d1:"+d1);
d2.setTime(d1.getTime());//将d2设置为当前时间
d1.setTime(0L);//将d1设置为原点
System.out.println(d2);
System.out.println("d1:"+d1);
}
1.2 SimpleDateFormat类:
概述:SimpleDateFormat可以对Date对象进行格式化和解析
构造方法:
- public SimpleDateFormat() 使用默认模式和日期格式
- public SimpleDateFormat(String pattern) 使用给定的模式和默认的日期格式
常用方法:
- 格式化(从Date到String):public final String format(Date date)
- 解析(从String到Date):public Date parse(String source)
示例代码:
public static void main(String[] args) throws ParseException {
Date d = new Date();//当前时间
//格式化:从 Date 到 String
SimpleDateFormat sdf = new SimpleDateFormat();
String s = sdf.format(d);//将Date对象以默认格式转换为字符串
System.out.println(s);//2021/5/28 上午9:53
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s1 = sdf1.format(d);//将Date对象以自定义格式转换为字符串
System.out.println(s1);//2021-05-28 09:56:21
//解析:从 String 到 Date
String s2 = "2048年08月09日 11:11:11";
//pattern参数的格式必须和s2的格式相同
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = sdf2.parse(s2);//将String转换为Date对象
System.out.println(date);//Sun Aug 09 11:11:11 CST 2048
}
2. JDK8新增日期类
JDK8将Date拆分成了3个类:
- LocalDate:表示日期(年月日)
- LocalTime:表示时间(时分秒)
- LocalDateTime:表示日期+时间 (年月日时分秒)
LocalDateTime创建方法:
- public static LocalDateTime now() 获取当前系统时间
- public static LocalDateTime of(年, 月 , 日, 时, 分, 秒) 自定义
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() | 获取小时 |
转换方法:
- public LocalDate toLocalDate () 转换成为一个LocalDate对象
- public LocalTime toLocalTime () 转换成为一个LocalTime对象
LocalDateTime格式化和解析:
- public String format (日期格式化对象)
- public LocalDateTime parse (准备解析的字符串, 日期格式化对象)
- JDK8的日期格式化器(DateTimeFormatter): 使用指定的日期模板获取一个日期格式化对象
示例代码:
public static void main(String[] args) {
//获取当前系统时间
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//2021-05-28T18:35:16.530775300
//自定义LocalDateTime对象
LocalDateTime localDateTime = LocalDateTime.of(2020,7,1,6,30,30);
//定义一个日期格式化器
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//格式化LocalDateTime对象,转换为String类型
String s = localDateTime.format(pattern);
System.out.println(s);
//把一个日期字符串解析成为一个LocalDateTime对象
String s1 = "2020年11月12日 13:14:15";
//parse为静态方法
LocalDateTime parse = LocalDateTime.parse(s1,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) | 添加或者减去周 |
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) | 减去或者添加周 |
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) | 直接修改秒 |
3. 时间间隔对象
Period:
方法名 | 说明 |
---|---|
public static Period between(开始时间,结束时间) | 计算两个“日期"的间隔 |
public int getYears() | 获得这段时间的年数 |
public int getMonths() | 获得此期间的总月数 |
public int getDays() | 获得此期间的天数 |
public long toTotalMonths() | 获取此期间的总月数 |
示例代码:
public static void main(String[] args) {
LocalDate localDate1 = LocalDate.of(2021, 12, 26);
LocalDate localDate2 = LocalDate.now();
//传入参数为LocalDate类型
Period between = Period.between(localDate2, localDate1);
System.out.println(between);//P6M28D
System.out.println(between.getYears());//0
System.out.println(between.getMonths());//6
System.out.println(between.getDays());//28
System.out.println(between.toTotalMonths());//6
}
Duration:
方法名 | 说明 |
---|---|
public static Duration between(开始时间,结束时间) | 计算两个“时间"的间隔 |
public long toSeconds() | 获得此时间间隔的秒 |
public int toMillis() | 获得此时间间隔的毫秒 |
public int toNanos() | 获得此时间间隔的纳秒 |
示例代码:
public static void main(String[] args) {
LocalTime localTime1 = LocalTime.now();
LocalTime localTime2 = LocalTime.of(23, 56, 31);
//传入参数为Temporal接口的实现类,主要包括 LocalDate、 LocalDateTime、LocalTime等
Duration d = Duration.between(localTime1, localTime2);
System.out.println(d);//PT4H41M44.493103S
System.out.println(d.toSeconds());
System.out.println(d.toMillis());
System.out.println(d.toNanos());
}
如有错误欢迎留言评论,及时更正。 5月28日 羽露风