You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏日期生成程序如何校验生成的日期为真实合法历史日期

实现方案

你完全不需要手动编写日期合法性校验逻辑,.NET 内置的 DateTime 结构已经天然处理了闰年2月天数、不同月份最大天数、年月自动进位的规则,直接基于初始日期按天累加即可,生成的所有日期都是合法的。

推荐实现(无需手动校验)

直接基于初始日期调用 AddDays 方法生成后续日期,代码如下:

// 先从ComboBox获取初始的年、月、日,生成起始日期对象
int initYear = int.Parse(cbo_year.SelectedItem.ToString());
int initMonth = int.Parse(cbo_month.SelectedItem.ToString());
int initDay = int.Parse(day);
DateTime currentDate = new DateTime(initYear, initMonth, initDay);

// 填充标签,lenght1为你需要生成的日期总数
for (int i = 1; i < lenght1; i++)
{
    var labels = Controls.Find("lbl_date_" + i, true);
    var label = (Label)labels[0];
    // 格式化为你需要的 dd.MM.yyyy 格式
    label.Text = currentDate.ToString("dd.MM.yyyy");
    // 直接加1天,自动处理月、年进位,生成的日期天然合法
    currentDate = currentDate.AddDays(1);
}

手动校验实现(匹配你原有逻辑)

如果你需要自己控制进位逻辑,可以用 DateTime.DaysInMonth 方法获取指定年月的最大合法天数,每次累加日之前做判断,代码如下:

int year = int.Parse(cbo_year.SelectedItem.ToString());
int month = int.Parse(cbo_month.SelectedItem.ToString());
int day1 = int.Parse(day);

for (int i = 1; i < lenght1; i++)
{
    var labels = Controls.Find("lbl_date_" + i, true);
    var label = (Label)labels[0];
    label.Text = $"{day1}.{month}.{year}";
    
    day1++;
    // 获取当前年月的最大合法天数
    int maxDays = DateTime.DaysInMonth(year, month);
    if (day1 > maxDays)
    {
        day1 = 1;
        month++;
        if (month > 12)
        {
            month = 1;
            year++;
        }
    }
}

内容的提问来源于stack exchange,提问作者Bubán Dávid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:06:03