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

C#中DateTime的Month属性只读无法赋值 解析欧盟格式日期计算间隔天数

问题原因

.NET 中的 DateTime 是不可变值类型,实例创建完成后,Year、Month、Day 等属性均为只读,无法直接修改。如果需要调整日期字段,必须基于现有值和新的字段参数,创建全新的 DateTime 实例。
另外你现有代码里存在一个逻辑错误:欧盟日期格式为「日/月/年」,按分隔符拆分后,索引为1的元素才是月份字段,你原代码中判断input[2]为月份的逻辑不符合输入格式规则。

实现步骤
  • 先处理月份转换逻辑:兼容数字月份和英文月份名称两种输入,统一转换为int类型的月份数值
  • 拆分输入后分别把日、月、年三个字段转换为合法的数值
  • 用转换完成的三个数值创建新的DateTime实例,替代原来的旧实例即可
完整可运行代码示例
using System;
using System.Globalization;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 读取两个日期输入
            string[] inputDate1 = Console.ReadLine().Split(' ', '/');
            string[] inputDate2 = Console.ReadLine().Split(' ', '/');

            // 处理第一个日期
            DateTime date1 = ParseEuDate(inputDate1);
            // 处理第二个日期
            DateTime date2 = ParseEuDate(inputDate2);

            // 计算间隔天数示例
            TimeSpan diff = date2 - date1;
            Console.WriteLine($"两个日期的间隔天数为:{Math.Abs(diff.TotalDays)}");

            Console.WriteLine("\n输入的第一个日期拆分结果:");
            foreach (var item in inputDate1)
            {
                Console.Write(item + " ");
            }
        }

        /// <summary>
        /// 解析欧盟格式(日/月/年)的日期拆分结果,返回DateTime实例
        /// </summary>
        private static DateTime ParseEuDate(string[] dateParts)
        {
            if (dateParts.Length != 3)
            {
                throw new ArgumentException("日期格式不合法,请按照 日/月/年 格式输入");
            }

            // 转换日
            int day = int.Parse(dateParts[0]);
            // 转换月:兼容数字和英文两种格式
            int month;
            string monthInput = dateParts[1].Trim().ToLower();
            if (!int.TryParse(monthInput, out month))
            {
                // 英文月份转数字,使用英文文化信息
                month = DateTime.ParseExact(monthInput, "MMMM", CultureInfo.GetCultureInfo("en-GB")).Month;
            }
            // 转换年
            int year = int.Parse(dateParts[2]);

            // 返回新的DateTime实例
            return new DateTime(year, month, day);
        }
    }
}
注意事项
  • 如果需要保留原有DateTime实例的时分秒信息,可以创建新实例时传入旧实例的时分秒参数:return new DateTime(year, month, day, oldDate.Hour, oldDate.Minute, oldDate.Second);
  • 代码中使用了英文英国文化信息en-GB匹配月份名称,符合欧盟日期输入的场景
  • 可以根据需要添加输入合法性校验,避免用户输入非法值导致程序报错

内容的提问来源于stack exchange,提问作者Mical -

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:01