日期时间的API测试
1.jdk 1.8 之前的日期时间的API类型
①System类中currentTimeMillis();
②java.util.Date和子类java.sql.Date
③SimpleDateFormat
④Calendar
2.SimpleDateFormat的使用
SimpleDateFormat的使用,SimpleDateFormat对日期Date类的格式化和解析
1.格式化,日期 --->字符串
2.解析,格式化的逆过程,字符串 --->日期
@Test
public void testSimpleDateFormat() throws ParseException {
//实例化SimpleDateFormat
SimpleDateFormat sdf=new SimpleDateFormat();
//格式化 日期 --->字符串
Date date=new Date();
System.out.println(date); //Thu Jul 18 21:41:57 CST 2019
String format = sdf.format(date);
System.out.println(format); //19-7-18 下午9:41
//解析
String str="19-10-18 下午4:17";
Date date1=sdf.parse(str);
System.out.println(date1); //Fri Oct 18 16:17:00 CST 2019
//*************按照指定的方式格式化和解析:调用带参的构造器********
//SimpleDateFormat sdf1=new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format1=sdf1.format(date);
System.out.println(format1); //2019-07-18 09:41:57
//解析: 要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),否则会抛异常
Date date2 = sdf1.parse("2019-07-18 04:30:05");
System.out.println(date2);//Thu Jul 18 04:30:05 CST 2019
}
3.练习一:字符串"2019-07-18" 转换为java.sql.Date
@Test
public void test1() throws ParseException {
String birth="2019-07-18";
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
Date date=sdf1.parse(birth);
System.out.println(date); //Thu Jul 18 00:00:00 CST 2019
java.sql.Date birthDate = new java.sql.Date(date.getTime());
System.out.println(birthDate); //2019-07-18
}
4.练习二:渔夫“三天打渔两天晒网” 从1990-01-01开始,在之后的某年某月他是打渔还是晒网?例如2020-09-08
思路:转化为毫秒数,(一天=24小时=24 *60分钟=24 *60 *60秒=24 *60 *60 *1000毫秒)
具体代码实现:
@Test
public void test2() throws ParseException {
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd");
Date date1 =sdf1.parse("1990-01-01");
//System.out.println(date1.getTime()); //631123200000
SimpleDateFormat sdf2 =new SimpleDateFormat("yyyy-MM-dd");
Date date2 =sdf1.parse("2020-09-08");
//System.out.println(date2.getTime()); //1599494400000
//计算总天数
long date= (date2.getTime() - date1.getTime())/(1000 * 60 * 60 *24);
//System.out.println(date); //11208
long l=date%5;
//System.out.println(l); //3
if(l==1 || l==2 ||l==3){
System.out.println("渔夫打渔");
}else {
System.out.println("渔夫晒网");
}
}
5.Calendar日历类的使用
注意,获取月份时,一月是0,二月是1,以此类推,12月是11,获取星期时,周日是1,周一是2,以此类推,周六是7
@Test
public void testCalendar(){
//1.实例化,它是抽象类,不能直接实例化
// 方式一,创建其子类(GregorianCalendar)的对象
//方式二,调用其静态方法getInstance()
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getClass());//class java.util.GregorianCalendar相当于还是创建的子类的对象
//2.常用方法
//get()
int day=calendar.get(Calendar.DAY_OF_MONTH);//获取今天是这个月的第几天
System.out.println(day); //18
System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); //5
//set()
calendar.set(Calendar.DAY_OF_MONTH,23);
day=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day); //23
//add()
calendar.add(Calendar.DAY_OF_MONTH,3);//修改的是calendar本身
day=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day); //26
calendar.add(Calendar.DAY_OF_MONTH,-3);
day=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day); //23
//getTime() 日历类 ---> Date
Date date=calendar.getTime();
System.out.println(date); //Tue Jul 23 21:50:21 CST 2019
//setTime() Date --->日历类
Date date1=new Date();
calendar.setTime(date1);
day=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day); //18
}
6.jdk 1.8 新增的日期时间API
要增加新的日期时间API的原因:
①可变性,日期,时间这样的类应该是不可变的
②存在偏移性,Date中的年份是从1900开始的,月份是从0开始的
③格式化,格式化只对Date有用,Calendar则不行
④不是线程安全的,不能处理闰秒等
偏移量会导致错误的比较具体见下面代码实现:
@Test
public void testDate(){
Date date1=new Date(2020,9,8);
System.out.println(date1); //Fri Oct 08 00:00:00 CST 3920
Date date2=new Date(2020-1900,9,8);
System.out.println(date2); //Thu Oct 08 00:00:00 CST 2020
}
jdk 1.8 新增的API ——LocalDate、LocalTime、LocalDateTime类等
LocalDate、LocalTime、LocalDateTime类的使用如下:
@Test
public void test1(){
//now():获取当前的日期、时间、日期+时间
LocalDate localDate= LocalDate.now();
System.out.println(localDate); //2019-07-18
LocalTime localTime=LocalTime.now();
System.out.println(localTime); //20:34:18.986
LocalDateTime localDateTime=LocalDateTime.now();
System.out.println(localDateTime); //2019-07-18T20:34:18.986
//of():设置指定的年、月、日、时、分、秒,没有偏移量
LocalDateTime localDateTime1=LocalDateTime.of(2020,10,19,20,33,40);
System.out.println(localDateTime1); //2020-10-19T20:33:40
//getxxx() 获取相关的属性
System.out.println(localDateTime.getDayOfMonth()); //18 当前是本月的第几天
System.out.println(localDateTime.getDayOfWeek()); //THURSDAY 当前是本周的周几
System.out.println(localDateTime.getMonth()); //JULY 当前是几月
System.out.println(localDateTime.getMonthValue()); //7 当前月份的数字形式
System.out.println(localDateTime.getHour()); //20 当前的小时数
System.out.println(localDateTime.getMinute()); //39 当前分钟数
System.out.println(localDateTime.getSecond()); //35 当前秒数
//体现了不可变性,返回值修改,本身并不修改
//withxxx():设置相关的属性
LocalDate localDate1 = localDate.withDayOfMonth(26);
System.out.println(localDate); //2019-07-18
System.out.println(localDate1); // 2019-07-26
LocalDateTime localDateTime2= localDateTime.withHour(4);
System.out.println(localDateTime); //2019-07-18T20:49:31.531
System.out.println(localDateTime2); //2019-07-18T04:49:31.531
//设置加
LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
System.out.println(localDateTime); //2019-07-18T20:53:55.526
System.out.println(localDateTime3); //2019-10-18T20:53:55.526
//设置减
LocalDateTime localDateTime4 = localDateTime.minusDays(5);
System.out.println(localDateTime); //2019-07-18T20:56:12.180
System.out.println(localDateTime4); //2019-07-13T20:56:12.180
}
日期时间在使用时要格外注意。
作 者:sweetheart1998
出 处:https://home.cnblogs.com/u/gujun1998/
如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
如果您觉得文章对您有帮助,可以点击文章右下角推荐一下!

浙公网安备 33010602011771号