C ++中的日期验证和转换

时间:2012-11-20 02:22:05

标签: c++

我必须写2个函数。将日期作为字符串并检查其是否为mm / dd / yy格式的日期;如果它的格式不正确,则应进行编辑以使其成为正确的格式。另一个函数应该将验证日期转换为格式“Month dd,20yy”。

我很确定我可以处理第二个功能,但我遇到了第一个问题。我只是不知道如何检查它是否以那种格式......任何想法?

我认为这样可行,但似乎没有...

更新的代码:

bool dateValidation(string shipDate)
{
    string temp;
    if(shipDate.length() == 8 )
    {
        if(shipDate[2] == '/' && shipDate[5] =='/')
        {
            int tempDay, tempMonth, tempYear;
            //Gather month
            temp = shipDate[0];
            temp += shipDate[1];
            //convert string to int
            tempMonth = temp.atoi;
            temp = "";

            //Gather day
            temp = shipDate[3];
            temp += shipDate[4];
            //convert string to int
            tempDay = temp.atoi;
            temp = "";

            //Gather year
            temp = shipDate[6];
            temp += shipDate[7];
            //convert string to int
            tempYear = temp.atoi;
            temp = "";

            if(tempMonth > 0 && tempMonth <= 12)
            {

                if(tempMonth == 9 ||
                   tempMonth == 4 ||
                   tempMonth == 6 ||
                   tempMonth == 11 ||)
                {
                    if(tempDay > 0 && tempDay <= 30)
                    {
                        if 30 days
                            }
                }
                else if(tempMonth == 2)
                {
                    if(tempDay > 0 && tempDay <= 28)
                    {
                        if 28 days
                            }
                }
                else
                {
                    if(tempDay > 0 && tempDay <= 31)
                    {
                        if 31 days
                            }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您要检查4件事:

  • 有8个字符吗?如果没有,那么甚至不用费心去检查其他任何东西。它的格式不正确。
  • 是第三个和第五个字符'/'。如果没有,那么你仍然没有正确的格式。
  • 检查每对的有效值。一个月有1到1天之间的天数 最多31个,从01开始不超过12个月和几个月 一年可以是任意2位数的任意组合。

这应该考虑格式,但如果你想确保日期有效:

  • 检查每个月的有效天数(1月31日,2月 28-29 ......)确实检查了那些闰年。

答案 1 :(得分:0)

这看起来很像我即将评分的项目......如果是我即将评分的项目,你应该验证它是否符合格里高利历。 2012年1月1日绝对有效,但您可能想要做什么以及我希望您考虑的是创建一个切换语句来检查2012年1月12日和10/2/2012等格式,因为它们是有效的。然后从这些解析月份日和年份。然后验证它们是否在公历的限制范围内。如果它是一个我猜它的类,你应该考虑将验证作为一个单独的函数来解析函数。

首先询问日期是否太长,如果没有,是否太短,如果不是哪个版本,则将d m y传递给验证函数。这种模块化将简化您的代码并减少指令。

类似

bool dateValidation(string shipDate) {      string temp;

switch(shipDate.length())
{
     case(10):
        // do what  your doing
        verify(m,d,y);
        break;

     case(8):
        //dealing with single digits
        // verify 1 and 3 are '/' and the rest are numbers
        verifiy(m,d,y);
        break;

     case(9):
        //a little more heavy lifting here 
        // but its good thinking for a new programmer
        verifiy(m,d,y);
        break;
     default:       

      //fail message
        break;
}