【问题标题】:Function that take date and return the statement of the validation of the date获取日期并返回日期验证语句的函数
【发布时间】:2019-06-05 17:34:42
【问题描述】:

编写一个名为 valid_date 的函数,该函数接受三个正整数标量输入 yearmonthday。如果这三个代表有效日期,则返回逻辑 true,否则返回 false。输出参数的名称是有效。如果任何输入不是正整数标量,则也返回 false。请注意,除能被 100 整除的年份外,每一个能被 4 整除的年份都是闰年。然而,能被 400 整除的年份也是闰年。例如,1900 年不是闰年,但 2000 年是。请注意,您的解决方案不得包含任何与日期相关的内置 MATLAB 函数。

样本:

valid = valid_date(2018,4,1)
valid = valid_date(2018,4,31)

输出是:

valid = 
  logical 
     1 

valid = 
  logical 
     0

【问题讨论】:

    标签: matlab loops for-loop vector


    【解决方案1】:

    这里是部分解决方案:

    function valid= valid_date(year,month,date)
    if nargin~=3
        valid=false;
    elseif ~isscalar(year) | ~isscalar(month) | ~isscalar(date)
        valid=false;
    elseif year<1 || month<1 || date<1
        valid=false;
    elseif  year~=fix(year) || month~=fix(month) || date~=fix(date)
        valid=false;
    elseif month>12 || date>31
        valid=false;
    
    elseif month==2
            if (rem(year,400)==0 || (rem(year,4)==0 && rem(year,100)~=0)) && date<30
                valid=true;
            elseif (rem(year,400)~=0 || (rem(year,4)~=0 && rem(year,100)==0)) && date<29
               
                    valid=true;
                else
                    valid=false;
            
            end
    else
        days = [31 29 31 30  31 30 31 31 30 31 30 31];
        totaldays = days(month);
        if date>totaldays
            valid=false;
        else
            valid=true;
        end
    end
    end
    

    【讨论】:

      【解决方案2】:

      我的解决办法是:

      function out= valid_date(y,m,d)
      
      if mod(y,4)==0
          if mod (y,100)==0
              if mod(y,400)==0
                  leap =true;
              else
                  leap=false;
              end
          else
              leap =true;
          end
      else
          leap= false;
      end 
      
      if y>0 &m>0&d>0 &y==fix(y)&m==fix(m)&d==fix(d)&m<=12 &isscalar(y)&isscalar(m)& isscalar(d)
      
      if (m==1 | m==3|m==5|m==7 |m==8 |m==10 |m==12)&d <=31
              out=true;
          elseif d<=30
              if m==2 
                  if leap==true & d<=29
                      out =true;
                  elseif leap==false &d<=28
                      out=true;
                  else
                      out=false;
                  end
              else
                  out=true;
              end
      else
          out =false;
          end
      else
          out= false;
      end
      

      【讨论】:

      • 此部分仅供解答,请在原帖中贴出代码
      • @Adam 这是我问题的答案.. :)
      • 那么你的问题是什么?
      • @Adam 我的问题是如何编写一个函数来检查日期是否有效..
      • 我猜,@Adam 想指出的是:你为什么要在第一时间发布这个问题,当你马上回答它的时候?这是第二次,请参阅your earlier question。如果您想在解决方案/代码的“质量”上使用 cmets,Stack Exchange 网络中有一个名为 Code Review 的单独分支。 (Stack Overflow 不需要一堆家庭作业……)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2021-12-31
      • 1970-01-01
      • 2014-09-04
      • 2013-04-19
      • 2012-06-07
      • 2018-08-16
      相关资源
      最近更新 更多