某个日期在当年的天数

原创
2019/12/04 21:17
阅读数 180

// demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

const int mdays[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

bool GetDateFormat(string date, int& year, int& month, int& day) {
    istringstream str(date);
    string temp = "0";
    int cnt = 0;

    while (getline(str, temp, '-'))
    {
        int d = atoi(temp.c_str());
        if (cnt == 0 && d >=1) {
            year = d;
            ++cnt;
            continue;
        }
        if (cnt == 1 && d >= 1 && d <= 12) {
            month = d;
            ++cnt;
            continue;
        }
        if (cnt == 2 && d >= 1 && d <= 31) {
            day = d;
            ++cnt;
            break;
        }
        if (cnt != 3)break;
    }
    return cnt == 3;
}

bool isLeepYear(int year) {
    if ((year % 400) == 0)return true;
    if ((year % 4) != 0)return false;
    if ((year % 100) == 0)return false;
    return true;
}

int MonthOfDays(int year, int month, int day) {
    int days = day;

    int m = month - 1;
    for (int i = 0; i < m; ++i)
    {
        days += mdays[i];
    }
    if (month >= 3 &&isLeepYear(year)) {
        days += 1;
    }
    return days;
}

int GetDays(string date) {
    int year = 0, month = 0, day = 0;
    bool isOk = GetDateFormat(date, year, month, day);
    if (isOk == false)return -1;

    return MonthOfDays(year, month, day);
}

int main()
{
    string date = "400-1-2";
    cout << GetDays(date);
}

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部