常用类——日期时间API
JDK8之前的日期时间APISystem类currentTimeMillis()System类中静态的方法currentTimeMillis()返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差JDK8的日期时间API小结
日期时间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
更多推荐
所有评论(0)