文章目录
JDK8之前:
System类中获取时间戳的方法
/**
* JDK8之前日期和时间的API测试
* @author cez
*/
public class DateTimeTest {
@Test
public void test1(){
//1.System类中的currentTimeMillis()
long time = System.currentTimeMillis();
//返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差
//称为时间戳
System.out.println(time);
}
}
Java中两个Date类的使用
public class DateTimeTest {
/*
java.util.Date类
java.sql.Date类
1.两个构造器的使用
2.两个方法的使用
>toString():显示当前的年月日时分秒
>getTime():获取当前Date对象对应的毫秒数(时间戳)
3.java.sql.Date对应着数据库中的日期类型的变量
>如何实例化
>sql.Date --->util.Date 直接利用多态,父类指针指向子类对象
*/
@Test
public void test2(){
//构造器1:Date():创建一个对应当前时间的Date对象
Date date1 = new Date();
System.out.println(date1.toString());//Wed Dec 23 08:55:50 CST 2020
System.out.println(date1.getTime());
//构造器2:创建指定毫秒数的Date对象
Date date2 = new Date(1608685010053L);
System.out.println(date2.toString());//Wed Dec 23 08:56:50 CST 2020
//创建java.sql.Date对象
java.sql.Date date3 = new java.sql.Date(321321432532L);
System.out.println(date3.toString());//1980-03-08
//情况1
Date date4 = new java.sql.Date(1412412412L);
java.sql.Date date5 = (java.sql.Date)date4;
//情况2
Date date6 = new Date();
//java.sql.Date date7 = (java.sql.Date)date6;//向上转型会报错!java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
java.sql.Date date7 = new java.sql.Date(date6.getTime());//获取时间戳后转换
}
}
SimpleDateFormat的使用
/**
* JDK8之前日期和时间的API测试
* SimpleDateFormat
* @author cez
*/
public class DateTimeTest {
/*
SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析
1、两个操作
1.1 格式化:日期-->字符串
1.2 解析:格式化的逆过程,字符串-->日期
2、SimpleDateFormat的实例化
*/
@Test
public void testSimpleDateFormat() throws ParseException {
//实例化SimpleDateFormat:使用默认构造器
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化日期 日期-->字符串
Date date = new Date();
System.out.println(date);
String format = sdf.format(date);
System.out.println(format);
//解析 格式化的逆过程,字符串-->日期
//String str = "2019-08-09";//java.text.ParseException: Unparseable date: "2019-08-09"
String str = "00-11-18 上午9:23";
Date date1 = sdf.parse(str);
System.out.println(date1);
//******按指定方式格式化和解析,调用带参的构造器
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format1 = sdf1.format(date);
String format2 = sdf2.format(date);
System.out.println(format1);
System.out.println(format2);
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),抛异常
Date date3 = sdf2.parse("2000-11-18 09:28:30");
System.out.println(date3);
}
}
Calendar日历类的使用
@Test
public void testCalendar(){
//1、实例化
//方式1:创建其子类(GregorianCalendar)的对象
//方式2:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
//System.out.println(calendar.getClass());//class java.util.GregorianCalendar
//2、常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
//set()
calendar.set(Calendar.DAY_OF_MONTH,22);X2
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//add()
calendar.add(Calendar.DAY_OF_MONTH,3);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//getTime() 日历类-->Date
Date date = calendar.getTime();
System.out.println(date);
//setTime() Date-->日历类
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
}
JDK8中
JDK8中日期时间API的介绍
java.time纠正了很多过去的缺陷
LocalDate、LocalTime、LocalDateTime的使用
public class JDK8DateTimeTest {
/*
LocalDate LocalTime LocalDateTime的使用
说明:
1、LocalDateTime使用频率较高
*/
@Test
public void testDate(){
//now():获取当前的日期、时间、日期+时间
//类似于Calendar
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
//of():设置指定的年月日时分秒,没有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2000, 11, 18, 11, 11, 11);
System.out.println(localDateTime1);
//getXxx():获取相关属性
System.out.println(localDateTime1.getDayOfMonth());
System.out.println(localDateTime1.getDayOfWeek());
System.out.println(localDateTime1.getDayOfYear());
System.out.println(localDateTime1.getMonth());
//withXxx():设置相关属性 不可变性
LocalDateTime localDateTime2 = localDateTime1.withDayOfMonth(22);
System.out.println(localDateTime1);
System.out.println(localDateTime2);
LocalDateTime localDateTime3 = localDateTime1.withHour(4);
System.out.println(localDateTime3);
//plusXxx()
LocalDateTime localDateTime4 = localDateTime1.plusDays(5);
System.out.println(localDateTime1);
System.out.println(localDateTime4);
//minusXxx()
LocalDateTime localDateTime5 = localDateTime1.minusDays(5);
System.out.println(localDateTime5);
}
}
Instant类的使用
- Instant:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。
public class JDK8DateTimeTest {
/*
Instant类的使用
类似于java.util.Date
*/
@Test
public void test(){
//now():获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant);//有时区差 2020-12-23T13:02:46.888Z
//添加时间的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
//toEpochMilli() 获取对应的毫秒数
long milli = instant.toEpochMilli();
System.out.println(milli);
//ofEpochMilli():通过给定的毫秒数,获取Instant实例 -->Date(long Millis)
Instant instant1 = Instant.ofEpochMilli(123124512513513L);
System.out.println(instant1);
}
}
DateTimeFormatter的使用
/*
DateTimeFormatter:格式化或解析日期、时间
类似于SimpleDateFormat
*/
@Test
public void test3(){
//实例化
//方式1:预定义的标准格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:日期-->字符串
LocalDateTime localDateTime = LocalDateTime.now();
String str = dateTimeFormatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str);
//解析:字符串-->日期
TemporalAccessor parse = dateTimeFormatter.parse(str);
System.out.println(parse);
//方式2:本地化相关的格式 ofLocalizedDateTime() ofLocalizedDate()
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
String str2 = dateTimeFormatter1.format(localDateTime);
System.out.println(str2);
//方式3:自定义的格式 如:ofPattern("yyyy-MM-dd hh:mm:ss E")
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
String str4 = dateTimeFormatter2.format(LocalDateTime.now());
System.out.println(str4);
//解析
TemporalAccessor parse1 = dateTimeFormatter2.parse("2019-08-08 03:50:50");
System.out.println(parse1);
}