第十一章_Java中的Date_Calendar_LocalDateTime日期类及SimpleDateFormat时间格式化类大总结
1. Date类的学习(jdk7)
1.1 Date类
-
概述
表示特定的时间瞬间,精确到毫秒。
-
单位毫秒
1秒 = 1000 毫秒
可以测试代码的效率
System.currentTimeMills() --> 获取当前系统毫秒值
- 计算机中的时间原点(国际基准时间) 1970年1月1日 0时0分0秒
中国标准时间 = 世界标准时间+8小时(中国在东8区)
- 地理知识:
0度经线-->本初子午线
北京在地球上的经纬度: 东经116 北纬 40度
15度:代表是1个时区,一个小时 我们所在时区:东8区
1.2 构造方法
Date类构造方法
| 方法名 | 说明 |
|---|---|
| public Date() | 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
| public Date(long date) | 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |
代码演示:
public class Test {
public static void main(String[] args) {
//利用空参构造创建Date对象
//date是当前的系统时间,默认格式是欧洲时间格式
Date date1 = new Date();
System.out.println(date1);
//利用有参构造创建Date对象
//表示从标准基准时间起指定的毫秒数
Date date2 = new Date(2000L);
System.out.println(date2);
}
}
执行效果:

1.3 常用方法
常用方法
| 方法名 | 说明 |
|---|---|
| public long getTime() | 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 |
| public void setTime(long time) | 设置时间,给的是毫秒值 |
代码演示:
public class Test {
public static void main(String[] args) {
//date是当前的系统时间,默认格式是欧洲时间格式
Date date = new Date();
System.out.println(date);
//获取当前时间的系统毫秒值
long time = date.getTime();
System.out.println(time);
System.out.println("---------------");
Date date1 = new Date();
//以时间原点为基准,按照毫秒值设置当前系统时间
date1.setTime(1000L);
System.out.println(date1);
}
}
执行效果:

2. SimpleDateFormat类
2.1概述
-
SimpleDateFormat类概述
SimpleDateFormat extends DateFormat
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
我们重点学习日期格式化和解析
2.2 构造方法
SimpleDateFormat类构造方法
| 方法名 | 说明 |
|---|---|
| public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |
| public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |
pattern的格式
字母不能乱写,字母之间的符号可以随便写
年 y
月 M
日 d
时 H
分 m
秒 s
比如:
yyyy-MM-dd HH:mm:ss
2.3常用方法
SimpleDateFormat类的常用方法
- 格式化(从Date到String)
- public final String format(Date date):将日期格式化成日期/时间字符串
- 解析(从String到Date)
- public Date parse(String source):从给定字符串的开始解析文本以生成日期
代码演示:
public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
//格式化
format(sdf);
//解析方法
parse(sdf);
}
public static void parse(SimpleDateFormat sdf) throws ParseException {
//定义字符串
String s = "2020:01:01 01:01:01";
Date date = sdf.parse(s);
System.out.println(date);
}
public static void format(SimpleDateFormat sdf) {
//创建Date对象
Date date = new Date();
System.out.println(date);
//格式化
String format = sdf.format(date);
System.out.println(format);
System.out.println("----------------------------");
}
}
执行效果:

注意事项:

3. JDK1.8时间日期类
3.1JDK8新增日期类
- LocalDate 表示日期(年月日)
- LocalTime 表示时间(时分秒)
- LocalDateTime 表示 日期 + 时间(年月日时分秒)
3.2 LocalDateTime创建方法
- 方法说明(这个类不能直接创建对象,需要调用方法来创建)
| 方法名 | 说明 |
|---|---|
| public static LocalDateTime now() | 获取当前系统时间 |
| public static LocalDateTime of (年, 月 , 日, 时, 分, 秒) | 使用指定年月日和时分秒初始化一个LocalDateTime对象 |
不能创建对象的原因,构造方法私有化,只能通过内部方法调用时创建

代码演示:
public class Test {
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);
}
}
执行效果:

3.3 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 class Test {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 20);
//public int getYear() 获取年
int year = localDateTime.getYear();
System.out.println("年为" +year);
//public int getMonthValue() 获取月份(1-12)
int month = localDateTime.getMonthValue();
System.out.println("月份为" + month);
Month month1 = localDateTime.getMonth();
// System.out.println(month1);
//public int getDayOfMonth() 获取月份中的第几天(1-31)
int day = localDateTime.getDayOfMonth();
System.out.println("日期为" + day);
//public int getDayOfYear() 获取一年中的第几天(1-366)
int dayOfYear = localDateTime.getDayOfYear();
System.out.println("这是一年中的第" + dayOfYear + "天");
//public DayOfWeek getDayOfWeek()获取星期
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
System.out.println("星期为" + dayOfWeek);
//public int getMinute() 获取分钟
int minute = localDateTime.getMinute();
System.out.println("分钟为" + minute);
//public int getHour() 获取小时
int hour = localDateTime.getHour();
System.out.println("小时为" + hour);
}
}
执行效果:

3.4 LocalDateTime转换方法
方法说明
| 方法名 | 说明 |
|---|---|
| public LocalDate toLocalDate () | 转换成为一个LocalDate对象 |
| public LocalTime toLocalTime () | 转换成为一个LocalTime对象 |
代码演示:
public class Test {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2020, 12, 12, 8, 10, 12);
//public LocalDate toLocalDate () 转换成为一个LocalDate对象
LocalDate localDate = localDateTime.toLocalDate();
System.out.println(localDate);
//public LocalTime toLocalTime () 转换成为一个LocalTime对象
LocalTime localTime = localDateTime.toLocalTime();
System.out.println(localTime);
}
}
执行效果:

3.5 LocalDateTime格式化和解析
方法说明
| 方法名 | 说明 |
|---|---|
| public String format (指定格式) | 把一个LocalDateTime格式化成为一个字符串 |
| public LocalDateTime parse (准备解析的字符串, 解析格式) | 把一个日期字符串解析成为一个LocalDateTime对象 |
| public static DateTimeFormatter ofPattern(String pattern) | 使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象 |
代码演示:
public class Test {
public static void main(String[] args) {
//时间格式化
method1();
//解析字符串时间
method2();
}
//解析字符串时间
private static void method2() {
//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);
}
//时间格式化
private static void method1() {
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
System.out.println(localDateTime);
//public String format (指定格式) 把一个LocalDateTime格式化成为一个字符串
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String s = localDateTime.format(pattern);
System.out.println(s);
System.out.println("-------------------------");
}
}
执行效果:

3.6 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 class Test {
public static void main(String[] args) {
//public LocalDateTime plusYears (long years) 添加或者减去年
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
//添加一年
LocalDateTime newLocalDateTime1 = localDateTime.plusYears(1);
System.out.println(newLocalDateTime1);
System.out.println("----------------------");
//减去一年
LocalDateTime newLocalDateTime2 = localDateTime.plusYears(-1);
System.out.println(newLocalDateTime2);
}
}
执行效果:

3.7 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 class Test {
public static void main(String[] args) {
//public LocalDateTime minusYears (long years) 减去或者添加年
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
//减去一年
LocalDateTime newLocalDateTime1 = localDateTime.minusYears(1);
System.out.println(newLocalDateTime1);
System.out.println("---------------------------");
//添加一年
LocalDateTime newLocalDateTime2 = localDateTime.minusYears(-1);
System.out.println(newLocalDateTime2);
}
}
执行效果:

3.8 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 class Test {
public static void main(String[] args) {
//public LocalDateTime withYear(int year) 修改年
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
//修改年
LocalDateTime newLocalDateTime1 = localDateTime.withYear(2048);
System.out.println(newLocalDateTime1);
System.out.println("-------------------------");
//修改月
LocalDateTime newLocalDateTime2 = localDateTime.withMonth(10);
System.out.println(newLocalDateTime2);
}
}
执行效果:

3.9 Period
方法说明
| 方法名 | 说明 |
|---|---|
| public static Period between(开始时间,结束时间) | 计算两个“时间"的间隔 |
| public int getYears() | 获得这段时间的年数 |
| public int getMonths() | 获得此期间的总月数 |
| public int getDays() | 获得此期间的天数 |
| public long toTotalMonths() | 获取此期间的总月数 |
代码演示:
public class Test {
public static void main(String[] args) {
//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
}
}
执行效果:

3.10 Duration
方法说明
| 方法名 | 说明 |
|---|---|
| public static Durationbetween(开始时间,结束时间) | 计算两个“时间"的间隔 |
| public long toSeconds() | 获得此时间间隔的秒 |
| public int toMillis() | 获得此时间间隔的毫秒 |
| public int toNanos() | 获得此时间间隔的纳秒 |
代码演示:
public class Test {
public static void main(String[] args) {
//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
}
}
执行效果:

LocalDate和LocalTime具有和LocalDateTime基本相同的方法.
4. Calendar日历类
4.1 概述
Calendar 类是一个抽象类,提供了很方便的不同日期格式的处理
4.2 获取对象
需要子类:GregorianCalendar–>一般我们不用
一般获取对象直接调用 getInstance方法
static Calendar getInstance() ->获取Calendar对象->代表的是子类对象
4.3 月份说明
0 1 2 3 4 5 6 7 8 9 10 11–>国外
1 2 3 4 5 6 7 8 9 10 11 12–>中国
4.4 常用方法
| 方法名 | 说明 |
|---|---|
| public int get(int field) | 返回指定的日历字段的值 |
| public void set(int field,int value) | 将给定的日历字段设置为指定的值 |
| public void add(int field,int amount) | 根据日历的规则,为给定的日历字段添加 或者减去指定的时间量 |
| public Date getTime() | 返回一个表示此Calendar时间值 (从历元到现在的毫秒偏移量)的Date对象 |
其他:
field:日历字段–>static–>类名直接调用
YEAR 年
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF_DAY 时(24小时制)
MINUTE 分
SECOND 秒
DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)
代码演示:
public class Test {
public static void main(String[] args) {
//获取Calendar对象
getCalendar();
System.out.println("-----------------------");
// get方法,获取指定的年月日
get();
System.out.println("------------------------");
// set方法,设置指定的年月日
set();
System.out.println("------------------------");
// add方法,对指定日期的年月日进行增减操作
add();
}
private static void add() {
//获取Calendar对象
Calendar calendar = Calendar.getInstance();
//给指定的年份加2年
//calendar.add(Calendar.YEAR,2);
//给指定的年份减2年
// calendar.add(Calendar.YEAR,-2);
//int i = calendar.get(Calendar.YEAR);//获取年份
//给指定的月份加1月
calendar.add(Calendar.MONTH,10);//0-11
int i = calendar.get(Calendar.MONTH);//获取月份
System.out.println(i);
}
public static void set() {
//获取Calendar对象
Calendar calendar = Calendar.getInstance();
//设置年份
//calendar.set(Calendar.YEAR,2021);
//int i = calendar.get(Calendar.YEAR);//获取年份
//设置月份
calendar.set(Calendar.MONTH,2);
int i = calendar.get(Calendar.MONTH);//获取月份
System.out.println(i);
}
private static void get() {
//获取Calendar对象
Calendar calendar = Calendar.getInstance();
//int i = calendar.get(Calendar.YEAR);获取年
int i = calendar.get(Calendar.MONTH);//获取月份
System.out.println(i);
}
public static void getCalendar() {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
}
}
执行效果:

全面解析Java中Date、Calendar、LocalDateTime、SimpleDateFormat等类的使用,包括构造方法、常用方法、日期格式化与解析,以及JDK1.8新增时间日期类的操作。
691

被折叠的 条评论
为什么被折叠?



