zoukankan      html  css  js  c++  java
  • 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));
        }
    }
  • 相关阅读:
    C语言scanf函数转换说明表及其修饰符表
    C语言printf函数转换说明表及其修饰符表
    JAVA中this和super用法
    JAVA构造器,重载与重写
    初步学习JAVA面向对象初步认识及面向对象内存分析图举例说明
    webpack4.0报WARNING in configuration警告
    chrome开发者工具--使用 Network 面板测量您的网站网络性能。
    随笔记录--Array类型
    PXC(percona xtradb cluster)新加节点避免SST的方法
    pt-online-schema-change原理解析
  • 原文地址:https://www.cnblogs.com/dk1024/p/11160789.html
Copyright © 2011-2022 走看看