常用类 | 时间类

1.Date

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1.返回当前时间
Date date = new Date();
System.out.println(date);

//时间戳,输出为纳秒数
System.out.println(date.getTime());

//2.返回指定时间
@Deprecated
Date mydate = newDate(1990,3,4,13,22);

//与java.sql.Date的转换
Date date2 = newDate(33232323223L);
//通过getTime()
java.sql.Date sqdate = new java.sql.Date(mydate.getTime());
System.out.println(sqdate);

2.Calender

实例化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Calendar mycalendar= Calendar.getInstance();
//get方法
int days = mycalendar.get(Calendar.DAY_OF_MONTH);
System.out.println("今天是当月的第:"+days+"天");
int days2 = mycalendar.get(Calendar.DAY_OF_YEAR);
System.out.println("今天是今年的第:"+days2+"天");

//set方法
//指定当前时间为今年的几天
mycalendar.set(Calendar.DAY_OF_YEAR,1);
days2 = mycalendar.get(Calendar.DAY_OF_YEAR);
System.out.println("今天是今年的第:"+days2+"天");

//add方法
//把当前时间往前增加指定天
mycalendar.add(Calendar.DAY_OF_YEAR,3);
days2 = mycalendar.get(Calendar.DAY_OF_YEAR);
System.out.println("今天是今年的第:"+days2+"天");

格式化与解析

1
2
3
4
5
6
7
Calendar CDR = Calendar.getInstance();
//格式化日历类-->时间类
System.out.println(CDR.getTime());
//解析时间类-->日历类
Date date = new Date();
CDR.setTime(date);
System.out.println("今年的第:"+CDR.get(Calendar.DAY_OF_YEAR)+"天");

3.SimpleDateFormat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//默认格式
SimpleDateFormat sdf = new SimpleDateFormat();
Date dt = new Date();
//格式化dt原本数据
System.out.println(sdf.format(dt));

//解析回Date原本的格式
Date dt2 = sdf.parse("2022/5/7下午10:49");
System.out.println(dt2);

//自定义格式
SimpleDateFormat sdf = new SimpleDateFormat("GGyyyy-MM-ddhh:mm:ss");
Date dt = new Date();
//格式化dt到我们自定义格式
System.out.println(sdf.format(dt));

//解析回Date原本的格式(parse里数据必须和我们自定义格式相同)
//否则报ParseException
Date dt2 = sdf.parse("公元2022-05-0710:53:29");
System.out.println(dt2);

与java.sql.Date的转换

1
2
3
4
5
String birth = "2020-09-08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dt = sdf.parse(birth);
java.sql.Date birthDate = new java.sql.Date(dt.getTime());
System.out.println(birthDate);
  • 以上l类都是jdk1.0的产物,存在数据可变性,时间戳,等一些问题
  • api中可以看到很多方法以及构造器以及deprecated了开发中基本上不再使用
  • 主要以jdk1.8重新引入的time包中的类为主,此包借鉴了joda-time

4.Local家族

  • Local三个类相当于Calender的升级
  • 都具有不可变性,对数据修改相当于又造了一个

初始化

1
2
3
4
5
6
7
8
9
//默认初始化
LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localTime);
System.out.println(localDate);
System.out.println(localDateTime);
//指定初始化
System.out.println(LocalDateTime.of(2015,4,6,5,29));

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//get()
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt.getDayOfYear());
System.out.println(ldt.getDayOfMonth());
System.out.println(ldt.getMonthValue());
//withXxx : setting
LocalDateTime changeyear = ldt.withDayOfYear(1);
LocalDateTime changemonth = ldt.withDayOfMonth(1);
System.out.println("init value:"+ldt);
System.out.println("change year:"+changeyear);
System.out.println("change month:"+changemonth);
//plusXxx : +
LocalDateTime plusyear = ldt.plusYears(1);
System.out.println("plus year:"+plusyear);
//minusXxx : -
LocalDateTime minusyear = ldt.minusYears(1);
System.out.println("minus year:"+minusyear);

5.Instant

Date类的升级版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Instant times = Instant.now();
//default TimeZone is UTC
System.out.println(times);

//+8 hour is CN time (Offset)
OffsetDateTime localTime = times.atOffset(ZoneOffset.ofHours(8));
System.out.println(localTime);

//from 1970-1-1-00:00:00 ---> now millisecond
long i = times.toEpochMilli();
System.out.println("millisecond:"+i);

//used ofEpochMilli parse to normal format
System.out.println(Instant.ofEpochMilli(i));

6.DateTimeFormatter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//.ISO_LOCAL_DATE_TIME为标准格式
//.ofPattern为自定义
DateTimeFormatter ter3 = DateTimeFormatter.ofPattern("GGG:yyyy-MM-dd HH:mm:ss");
//格式化
String str_time = ter3.format(LocalDateTime.now());
System.out.println(str_time);
//解析
System.out.println(ter3.parse("公元:2022-05-08 10:26:31"));


//jdk9往后需添加withZone(ZoneId.systemDefault())
//Style有四种 SHORT MEDIUM LONG FULL

//格式化
DateTimeFormatter ter2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withZone(ZoneId.of("Asia/Shanghai"));
String strsj = ter2.format(LocalDateTime.now());
System.out.println(strsj);
//解析
System.out.println(ter2.parse("2022年5月8日 下午10:19:41"));

常用类 | 时间类
http://example.com/2022/05/10/Java初级部分/NormalClass/时间类使用/
Author
John Doe
Posted on
May 10, 2022
Licensed under