学习目标
- 掌握 java.lang.System类的currentTimeMillis();java.util.Date类;java.sql.Date类;java.text.SimpleDateFormat类 ;java.util.Calendar(日历)类。
- 掌握常用的JDK8中新日期时间API
学习内容
1. java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适于计算时间差。
public class TimeTest {
@Test
public void test(){
long l = System.currentTimeMillis();
System.out.println(l);
}
}
2. java.util.Date类
两个构造器:
- Date():使用无参构造器创建的对象可以获取本地当前时间。
public class TimeTest {
@Test
public void test(){
Date date = new Date();
System.out.println(date);
}
}
结果:Fri May 14 20:30:50 CST 2021
- Date(long date)
public class TimeTest {
@Test
public void test(){
Date date = new Date(899999777666l);
System.out.println(date);
}
}
结果:Thu Jul 09 23:56:17 CST 1998
两个方法:
- getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
public class TimeTest {
@Test
public void test() {
Date date = new Date();
long time = date.getTime();
System.out.println(time);
}
}
结果:1620995676420
- toString():把此 Date 对象转换为以下形式的 String: dow mon ddhh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
public class TimeTest { @Test public void test() { Date date = new Date(); System.out.println(date.toString()); } }
结果:Fri May 14 20:36:09 CST 2021
3. java.sql.Date类(extends java.util.Date)
java.util.Date转化成 java.sql.Date
public class TimeTest {
@Test
public void test() {
Date date = new Date();
java.sql.Date date1 = new java.sql.Date(date.getTime());
System.out.println(date1);
}
}
结果:2021-05-15
4. java.text.SimpleDateFormat类
格式化:
public class TimeTest {
@Test
public void test() {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 EEE HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println(format);
}
}
结果:2021年05月15日 星期六 12:31:25
解析:
public void test() {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 EEE HH:mm:ss");
//String format = simpleDateFormat.format(date);
Date date1 = null;
try {
date1 = simpleDateFormat.parse("2021年05月15日 星期六 12:31:25");
} catch (ParseException e) {
e.printStackTrace();
}
// System.out.println(format);
System.out.println(date1);
}
}
结果:Sat May 15 12:31:25 CST 2021
5. java.util.Calendar(日历)类 :Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取一个Date对象
public class TimeTest {
@Test
public void test() {
Calendar date = Calendar.getInstance();//获得一个Date对象
Date time = date.getTime();
System.out.println(time);
}
}
结果:Sat May 15 12:48:13 CST 2021
方法的测试:
public class TimeTest {
@Test
public void test() {
Calendar date = Calendar.getInstance();//获得一个Date对象
date.setTime(new Date());
System.out.println(date);
date.add(Calendar.HOUR,2);
System.out.println(date);
date.set(Calendar.DAY_OF_MONTH,9);
System.out.println(date);
date.add(Calendar.MARCH,3);
System.out.println(date);
}
}
JDK8中新日期时间API
LocalDate、LocalTime、LocalDateTime (用的多)类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
获取当前时间
public class TimeTest {
@Test
public void test() {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
}
}
结果:2021-05-15
13:30:43.171
2021-05-15T13:30:43.171
获取指定时间对象
public class TimeTest {
@Test
public void test() {
// LocalDate localDate = LocalDate.now();
// LocalTime localTime = LocalTime.now();
// LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(2021, 5, 15, 13, 35);
// System.out.println(localDate);
// System.out.println(localTime);
// System.out.println(localDateTime);
System.out.println(of);
}
结果:2021-05-15T13:35
get方法:
public class TimeTest {
@Test
public void test() {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(2021, 5, 15, 13, 35);
// System.out.println(localDate);
// System.out.println(localTime);
// System.out.println(localDateTime);
// System.out.println(of);
System.out.println(localDateTime.getDayOfMonth());
System.out.println(localDateTime.getDayOfWeek());
System.out.println(localDateTime.getHour());
System.out.println(localDateTime.getDayOfYear());
System.out.println(localDateTime.getMinute());
}
结果:
15
SATURDAY
13
135
40
with方法
public class TimeTest {
@Test
public void test() {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(2021, 5, 15, 13, 35);
LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(8);
System.out.println(localDateTime);//体现不可变性
System.out.println(localDateTime1);
}
}
结果:
2021-05-15T13:43:45.476
2021-05-08T13:43:45.476
plus方法:
public class TimeTest {
@Test
public void test() {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(2021, 5, 15, 13, 35);
LocalDateTime localDateTime1 = localDateTime.plusDays(4);
System.out.println(localDateTime);//体现不可变性
System.out.println(localDateTime1);
}
}
结果:
2021-05-15T13:48:21.992
2021-05-19T13:48:21.992
minus方法:
public class TimeTest {
@Test
public void test() {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(2021, 5, 15, 13, 35);
LocalDateTime localDateTime1 = localDateTime.minusDays(5);
System.out.println(localDateTime);
System.out.println(localDateTime1);
}
}
结果:
2021-05-15T13:51:07.113
2021-05-10T13:51:07.113
Instant类
获得对象:
public class TimeTest {
@Test
public void test() {
Instant now = Instant.now();
System.out.println(now);//按照本初子午线的时间
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
}
}
结果:
2021-05-15T05:58:03.197Z
2021-05-15T13:58:03.197+08:00
方法:
public class TimeTest {
@Test
public void test() {
Instant now = Instant.now();
System.out.println(now);//按照本初子午线的时间
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
long l = now.toEpochMilli();
System.out.println(l);
Instant instant = Instant.ofEpochMilli(1621058437650l);
System.out.println(instant);
}
}
结果:
2021-05-15T06:02:41.769Z
2021-05-15T14:02:41.769+08:00
1621058561769
2021-05-15T06:00:37.650Z
java.time.format.DateTimeFormatter 类
public class TimeTest {
@Test
public void test() {
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
String format = dateTimeFormatter.format(localDateTime);
System.out.println(format);
TemporalAccessor parse = dateTimeFormatter.parse("21-5-15 下午2:14");
System.out.println(parse);
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
String format1 = dateTimeFormatter1.format(localDateTime);
System.out.println(format1);
TemporalAccessor parse1 = dateTimeFormatter1.parse("2021年5月15日 下午02时16分45秒");
System.out.println(parse1);
}
}
结果:
21-5-15 下午2:17
{},ISO resolved to 2021-05-15T14:14
2021年5月15日 下午02时17分21秒
{},ISO resolved to 2021-05-15T14:16:45
自定义:
public class TimeTest {
@Test
public void test() {
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String format = dateTimeFormatter.format(localDateTime);
System.out.println(format);
}
}
结果:
2021年05月15日