2019阿里云面试题,竟然现场敲代码,现在的企业越来越实在了
写一个方法,输入两个Date d1,d2,按照自然月输出,
如:输入“2019-05-10”,“2019-10-10”
输出如图所示:
需要考虑的方面:1、 正常情况:跨月,跨年
2 、参数为null
3 、开始日期小于终止日期
代码:
package com.example.baiduface.test; import org.junit.Test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @Author: ldk * @Date: 2019/7/9 20:28 * @Describe: */ public class test { //输入两个日期,调用 A(Date d1 ,Date d2) @Test public void test() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d1 = sdf.parse("2019-05-10"); Date d2 = sdf.parse("2019-10-10"); A(d1, d2); } public void A(Date d1, Date d2) throws ParseException { //判空 if (d1 == null || d2 == null || d1.getTime() > d2.getTime()) { System.out.println("参数错误!!"); return; } //当d1小于d2之前,就一直循环 while (d1.getTime() <= d2.getTime()) { //根据 d1 获取当月最后一天 dmax Date dmax = fun2(d1); if (dmax.getTime() < d2.getTime()) { B(d1, dmax); //d1转化成下月第一天 d1 = fun1(d1); continue; } else if (dmax.getTime() > d2.getTime()) { B(d1, d2); break; } else if (dmax.getTime() == d2.getTime()) { B(d1, d2); break; } } } //根据d1 获得 下个月第一天 public Date fun1(Date d1) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = sdf.format(d1); try { Date date = sdf.parse(dateStr); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.add(Calendar.MONTH, 1); Date time = calendar.getTime(); return time; } catch (ParseException e) { e.printStackTrace(); } return null; } //根据d1 获得 当月最后一天 public Date fun2(Date d1) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cale = Calendar.getInstance(); cale.setTime(d1); cale.add(Calendar.MONTH, 1); cale.set(Calendar.DAY_OF_MONTH, 0); String lastday = sdf.format(cale.getTime()); return sdf.parse(lastday); } //调用B方法输出整理好的日期 public void B(Date d1, Date d2) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sdf.format(d1) + " >> " + sdf.format(d2)); } }