日期时间API
1、JDK8之前的日期时间API
1.1、System类currentTimeMillis()
System类中静态的方法currentTimeMillis()返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差
称为 时间戳
class Untitled {
public static void main(String[] args) {
long time = System.currentTimeMillis();
System.out.println(time); //1629968985406
}
}
1.2、两个Date类
父类 java.util.Date
————————子类 java.sql.Date
1、实例化:
Date() :无参构造器获取本地当前时间
Date(long l): 放入时间戳获取时间
Date(年,月,日,时,分,秒):已过时,不推荐用(有偏移量)
2、常用方法
getTime() :返回当前Date对应的毫秒数。(时间戳)
toString() : 返回当前时间 Thu Aug 26 09:04:17 UTC 2021
import java.util.Date;
class Untitled {
public static void main(String[] args) {
//构造器一:Date()
Date dd = new Date();
//两个方法
System.out.println(dd); //Thu Aug 26 09:04:17 UTC 2021
System.out.println(dd.getTime()); //1629968985406
//构造器二:Date(long l)
Date dd1 = new Date(1630032352647L);
System.out.println(dd1); //Fri Aug 27 02:45:52 UTC 2021
//构造器三:会有偏移量
//年份输入2021,代表1900+2021。月份输入8,代表的是九月份。
Date dd2 = new Date(2021,8,27,10,47,50);
System.out.println(dd2);//Tue Sep 27 10:47:50 UTC 3921
}
}
子类 java.sql.Date 代表数据库中日期类型的变量
1、实例化:放入时间戳获取时间
new java.sql.Date(1630032487511L);
class Untitled {
public static void main(String[] args) {
//构造器一:Date()
java.sql.Date dd = new java.sql.Date(1630032487511L);
System.out.println(dd); //2021-08-27
}
}
2、如何将 java.sql.Date 对象转换为 java.util.Date 对象
向上转型——多态。子父类的关系
3、如何将 java.util.Date 对象转换为 java.sql.Date 对象
向上转型——多态
借用时间戳new java.sql.Date(new Date().getTime());
import java.util.Date;
class Untitled {
public static void main(String[] args) {
//将 java.util.Date 对象转换为 java.sql.Date 对象
//情况一:使用多态向下转型
java.util.Date dd1 = new java.sql.Date(1630032487511L);
java.sql.Date dd2 = (java.sql.Date)dd1;
System.out.println(dd2); //2021-08-27
//情况二:
Date dd3 = new Date(1630032487511L);
//编译报错
//java.sql.Date dd2 = (java.sql.Date)dd3;
java.sql.Date dd4 = new java.sql.Date(dd3.getTime());
System.out.println(dd4); //2021-08-27
}
}
1.3、SimpleDateFormat
1、实例化
SimpleDateFormat():默认日期格式
SimpleDateFormat("yyyy-MM-dd hh:mm:ss"):指定日期格式
2、格式化: java.util.Date 日期—>字符串
调用实例方法format(Date dd)方法
import java.util.Date;
import java.text.SimpleDateFormat;
class Untitled {
public static void main(String[] args) {
//默认日期格式
SimpleDateFormat s = new SimpleDateFormat();
//格式化:日期--->字符串
Date dd = new Date();
String str = s.format(dd);
System.out.println(str); //8/27/21, 3:52 AM
}
}
3 、解析:字符串 —>日期 java.util.Date
调用实例方法parse(String s)
默认日期格式
需要注意SimpleDateFormat实例化时候的日期格式
import java.util.Date;
import java.text.SimpleDateFormat;
class Untitled {
public static void main(String[] args) {
//默认日期格式
SimpleDateFormat s = new SimpleDateFormat();
//解析:字符串 --->日期
String str = "8/27/21, 3:52 AM";
try{
Date dd = s.parse(str);
System.out.println(dd);//Fri Aug 27 03:52:00 UTC 2021
}catch(Exception e){
}
}
}
指定日期格式
需要注意SimpleDateFormat实例化时候的日期格式
import java.util.Date;
import java.text.SimpleDateFormat;
class Untitled {
public static void main(String[] args) {
//指定日期格式
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化:日期--->字符串
Date dd = new Date();
String str = s.format(dd);
System.out.println(str); //2021-08-27 05:17:48
//解析:字符串 --->日期
String str1 = "2021-08-27 05:17:48";
try{
Date dd2 = s.parse(str1);
System.out.println(dd2);//Fri Aug 27 05:17:48 UTC 2021
}catch(Exception e){
}
}
}
练习题一:
字符串 2021-09-08 转换为 java.sql.Date
import java.util.Date;
import java.text.SimpleDateFormat;
class Untitled {
public static void main(String[] args) {
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
String str = "2021-09-08";
try{
Date dd = s.parse(str);
System.out.println(dd);
java.sql.Date dd1 = new java.sql.Date(dd.getTime());
}catch(Exception e){
}
}
}
1.4、Calendar(抽象类)
注意 Calendar是一个抽象类
1、实例化
①创建其子类GregorianCalendar的对象
②调用静态方法getInstance() ,其实这个方法返回的也是子类的对象
2、常用方法(实例方法)
get()方法
注意:
获取月份时:一月是0、二月是1…12月是11
获取星期时:周日是1、周一是2…周六是7
class Untitled {
public static void main(String[] args) {
Calendar cc = Calendar.getInstance();
int i1 = cc.get(Calendar.DAY_OF_MONTH);
System.out.println(i1); //27
int i2 = cc.get(Calendar.DAY_OF_YEAR);
}
}
set()方法。无返回值,直接修改对象本身
修改的是日历类对象本身,体现了可变性
class Untitled {
public static void main(String[] args) {
Calendar cc = Calendar.getInstance();
//修改之前
System.out.println(cc.get(Calendar.DAY_OF_MONTH)); //27
cc.set(DAY_OF_MONTH,15);
//修改之后
System.out.println(cc.get(Calendar.DAY_OF_MONTH)); //15
}
}
add()方法。无返回值,直接修改对象本身
修改的是日历类对象本身,体现了可变性
class Untitled {
public static void main(String[] args) {
Calendar cc = Calendar.getInstance();
//修改之前
System.out.println(cc.get(Calendar.DAY_OF_MONTH)); //27
//增加
cc.add(DAY_OF_MONTH,1);
//修改之后
System.out.println(cc.get(Calendar.DAY_OF_MONTH)); //28
//减少
cc.add(DAY_OF_MONTH,-5);
//修改之后
System.out.println(cc.get(Calendar.DAY_OF_MONTH)); //23
}
}
getTime()方法
日历类 —> java.util.Date 日期
class Untitled {
public static void main(String[] args) {
Calendar cc = Calendar.getInstance();
Date dd = cc.getTime();
System.out.println(dd);
}
}
setTime(Date dd)方法。无返回值,直接修改对象本身
java.util.Date 日期 —> 日历类
class Untitled {
public static void main(String[] args) {
Date dd = new Date();
Calendar cc = Calendar.getInstance();
cc.setTime(dd);
System.out.println(cc.get(Calendar.DAY_OF_MONTH));
}
}
2、JDK8的日期时间API
2.1、LocalDate、 LocalTime、 LocalDateTime
| 方法 | 概述 |
|---|---|
now() 、 now(int i) | 静态方法,当前时间创建对象、指定时区创建对象 |
of() | 静态方法,根据指定日期创建对象 |
getDayOfMonth()、getDayOfYear() | 获取月份天数,获取年份天数 |
getDayOfWeek() | 获取星期几(返回一个 DayOfWeek 枚举值) |
getMonth() | 获取月份,返回 Month 枚举值 |
getMonthValue() 、getYear() | 获取月份数字,获得年份 |
getHour() 、getMinute()、getSecond() | 获取当前对象的时分秒 |
withDayOfMonth()、withDayOfYear() 、withMonth() 、withYear() | 修改为指定值并返回对象,不可变性 |
plusHours() 、plusDays()、plusWeeks()、plusMonths()、plusYears() | 当前对象添加几天、几周、几年等等 |
minusHours() 、minusDays()、minusWeeks()、minusMonths()、minusYears() | 当前对象减去几天、几周、几年等等 |
实例化、获取时间
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
class Untitled {
public static void main(String[] args) {
LocalDateTime dd = LocalDateTime.now();
System.out.println(dd);
//of():设置指定时间,没有偏移量
LocalDateTime dd1 = LocalDateTime.of(2021,08,27,15,17,55);
System.out.println(dd1);
//getXxx()
System.out.println(dd1.getDayOfMonth());
}
}
更改时间,体现不可变性
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
class Untitled {
public static void main(String[] args) {
//withXxx()
LocalDateTime dd1 = LocalDateTime.of(2021,08,27,15,17,55);
LocalDateTime dd2 = dd1.withDayOfMonth(12);
System.out.println(dd1); //体现不可变性
System.out.println(dd2);
//plusXxx()
LocalDateTime dd3 = dd1.plusDays(5);
System.out.println(dd1); //体现不可变性
System.out.println(dd3);
//minusXxx()
LocalDateTime dd4 = dd1.minusDays(5);
System.out.println(dd1); //体现不可变性
System.out.println(dd4);
}
}
2.2、Instant 瞬时
now():返回当前本初子午线对应的标准时间
class Untitled {
public static void main(String[] args) {
Instant ii = Instant.now();
System.out.println(ii);
}
}
atOffset():返回指定时区的时间
class Untitled {
public static void main(String[] args) {
Instant ii = Instant.now();
OffsetDateTime oo = ii.atOffset(ZoneOffset.ofHours(8));
System.out.println(oo);
}
}
toEpochMilli():获取当前本初子午线上标准时间的自1970年1月1日0时0分0秒起算的毫秒数——时间戳
class Untitled {
public static void main(String[] args) {
Instant ii = Instant.now();
long ll = ii.toEpochMilli();
System.out.println(ll);
}
}
ofEpochMilli():静态方法。通过指定时间戳返回 Instant对象
class Untitled {
public static void main(String[] args) {
Instant ii = Instant.ofEpochMilli(1213512121L);
System.out.println(ii);
//类似于
Date dd = new Date(4545646465456L);
System.out.println(dd);
}
}
2.3、java.time.format.DateTimeFormatter
SimpleDateFormat()的日期格式就只有默认格式和指定格式两种情况
DateTimeFormatter日期格式分三种情况
①格式化:日期 ——> 字符串
调用实例方法format(TemporalAccessor ll)
注意: 因为LocalDateTime等类实现了 TemporalAccessor 接口,所以可以传入这些类的对象
②解析:字符串 ——> 日期
调用实例方法parse(String s)
情况一:预定义的标准格式
ISO_LOCAL_DATE_TIME
ISO_LOCAL_DATE
ISO_LOCAL_TIME
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
class Untitled {
public static void main(String[] args) {
DateTimeFormatter dd = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:日期 ——> 字符串
LocalDateTime ll = LocalDateTime.now();
String s = dd.format(ll);
System.out.println(ll); //LocalDateTime的对象不会受到改变
System.out.println(s);
//解析:字符串 ——> 日期
TemporalAccessor pp = ll.parse("2021-08-27T08:08:50.012895");
}
}
情况二:本地化相关的格式of.LocalizedDateTime()
FormatStyle.LONG
FormatStyle.MEDIUM
FormatStyle.SHORT
适用于: LocalDateTime
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
class Untitled {
public static void main(String[] args) {
DateTimeFormatter dd = of.LocalizedDateTime(FormatStyle.SHORT);
//格式化:日期 ——> 字符串
LocalDateTime ll = LocalDateTime.now();
String s = dd.format(ll);
System.out.println(ll);//她永远是她,不会变
System.out.println(s);
//解析:字符串 ——> 日期
TemporalAccessor pp = ll.parse(" ");
}
}
本地化相关的格式 of.LocalizedDate()
FormatStyle.FULL
FormatStyle.LONG
FormatStyle.MEDIUM
FormatStyle.SHORT
适用于: LocalDate
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
class Untitled {
public static void main(String[] args) {
DateTimeFormatter dd = of.LocalizedDate(FormatStyle.FULL);
//格式化:日期 ——> 字符串
String s = dd.format(LocalDate.now());
System.out.println(s);
}
}
重点!!!
情况三: 自定义的格式 ofPattern("yyyy-MM-dd hh:mm:ss")
class Untitled {
public static void main(String[] args) {
DateTimeFormatter dd = ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化:日期 ——> 字符串
String s = dd.format(LocalDateTime.now());
System.out.println(s);
}
}
3、小结
JDK8之前的日期时间API
System类的静态方法currentTimeMillis(),时间戳- 两个
Date类 java.util.Date子类Date():无参构造器获取本地当前时间Date(long l): 放入时间戳获取时间Date(年,月,日,时,分,秒):会有偏移量getTime():返回当前Date对应的毫秒数。(时间戳)toString(): 返回当前时间(已被重写)Thu Aug 26 09:04:17 UTC 2021
java.sql.Date子类- 实例化:
new java.sql.Date(1630032487511L); - 将 java.util.Date 对象转换为 java.sql.Date 对象
① 向上转型——多态
② 借用时间戳new java.sql.Date(new Date().getTime());
- 实例化:
SimpleDateFormat类- 实例化
①SimpleDateFormat():默认日期格式
②SimpleDateFormat("yyyy-MM-dd hh:mm:ss"):指定日期格式 - 格式化: java.util.Date 日期—>字符串
调用实例方法format(Date dd) - 解析:字符串 —>日期 java.util.Date
调用实例方法parse(String s)
- 实例化
Calendar类- 实例化
①创建其子类GregorianCalendar的对象
②调用静态方法getInstance(),其实这个方法返回的也是子类的对象 - 常用方法(实例方法)
get()方法set()方法。无返回值,直接修改对象本身add()方法。无返回值,直接修改对象本身getTime()方法
日历类 —> java.util.Date 日期setTime(Date dd)方法。无返回值,修改对象本身
java.util.Date 日期 —> 日历类
- 实例化
JDK8的日期时间API
本文详细介绍了JDK8后引入的日期时间API,包括LocalDate, LocalDateTime, Instant的使用方法,以及与旧API的区别,如LocalDate的不可变性操作和Instant的时区处理。同时涵盖了DateTimeFormatter的灵活格式化和解析功能。
972

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



