开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8916|回复: 5
收起左侧

[C#源码] C#计算日期间隔年月日函数,总感觉哪里不对

[复制链接]
结帖率:100% (1/1)
发表于 2022-9-14 00:36:00 | 显示全部楼层 |阅读模式   江苏省苏州市
/// <summary>
        ///
        /// </summary>
        /// <param name="MinDate"></param>
        /// <param name="MaxDate"></param>
        /// <returns></returns>
        public static string GetDiffDate(DateTime MinDate, DateTime MaxDate)
        {

            string result = "";
            GetDiffDateModel flag = new GetDiffDateModel();
            GetDiffDateModel _minDate =new GetDiffDateModel();
            _minDate.Year = MinDate.Year;
            _minDate.Month = MinDate.Month;
            _minDate.Day = MinDate.Day;
            GetDiffDateModel _maxDate = new GetDiffDateModel();
            _maxDate.Year = MaxDate.Year;
            _maxDate.Month = MaxDate.Month;
            _maxDate.Day = MaxDate.Day;
            //只比较年月日
            DateTime _MinDate = new DateTime(MinDate.Year, MinDate.Month, MinDate.Day);
            DateTime _MaxDate = new DateTime(MaxDate.Year, MaxDate.Month, MaxDate.Day);
            //防呆
            if (_MinDate >= _MaxDate)
            {
                result = "开始日期大于截止日期!";
                return result;
            }
            //年
            flag.Year = _maxDate.Year - _minDate.Year;
            if (flag.Year <= 0) { flag.Year = 0; }
            //月
            if(_maxDate.Month< _minDate.Month)
            {
                flag.Year--;
                flag.Month = (_maxDate.Month+12) - _minDate.Month;
            }
            else
            {
                flag.Month = _maxDate.Month - _minDate.Month;
            }
            //日
            if (_maxDate.Day < _minDate.Day)
            {
                flag.Month--;

                if(flag.Month<=0)
                {
                    flag.Year--;
                    flag.Month = 11;
                }
                flag.Day = (_maxDate.Day + DateTime.DaysInMonth(_maxDate.Year, _maxDate.Month-1)) - _minDate.Day;
            }
            else
            {
                flag.Day = _maxDate.Day - _minDate.Day;
            }
            //格式化文本年月日
            if (flag.Day > 0)
            {
                if (flag.Day == 31)
                {
                    flag.Month++;
                    flag.Day=0;
                }
                else
                {
                    if(flag.Year>0 || flag.Month>0)
                    {
                        result ="零"+ flag.Day.ToString() + "天";
                    }
                    else
                    {
                        result = flag.Day.ToString() + "天";
                    }

                }
            }
            if (flag.Month > 0)
            {
                if (flag.Day == 12)
                {
                    flag.Year++;
                    flag.Month = 0;
                }
                else
                {
                    result =  flag.Month.ToString() + " 个月"+ result;
                }
            }
            if (flag.Year > 0) { result = flag.Year.ToString() + "年"+ result; }

            return result;
        }

        public class GetDiffDateModel
        {
            public int Year { get; set; }
            public int Month { get; set; }
            public int Day { get; set; }
        }


结帖率:100% (1/1)
 楼主| 发表于 2023-6-24 22:59:45 | 显示全部楼层   北京市北京市

我要返回   间隔 几年几个月几天   这种类型的  

试错最终版:https://mp.csdn.net/mp_blog/creation/editor/131131617
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
 楼主| 发表于 2022-10-4 16:45:46 | 显示全部楼层   河南省南阳市
mz135135 发表于 2022-9-14 08:34
写的太复杂了。
[mw_shl_code=csharp,true]///
        /// 获取两时间差的元组

//格式化文本年月日
            if (flag.Day > 0)
            {
                if (flag.Day == 31)
                {
                    flag.Month++;
                    flag.Day=0;
                }
                else
                {
                    if(flag.Year>0 || flag.Month>0)
                    {
                        result ="零"+ flag.Day.ToString() + "天";
                    }
                    else
                    {
                        result = flag.Day.ToString() + "天";
                    }

                }
            }
            if (flag.Month > 0)
            {
                if (flag.Day == 12)
                {
                    flag.Year++;
                    flag.Month = 0;
                }
                else
                {
                    result =  flag.Month.ToString() + " 个月"+ result;
                }
            }
            if (flag.Year > 0) { result = flag.Year.ToString() + "年"+ result; }

            return result;
回复 支持 反对

使用道具 举报

结帖率:43% (3/7)
发表于 2022-9-14 08:34:19 | 显示全部楼层   河南省郑州市
写的太复杂了。
[C#] 纯文本查看 复制代码
/// <summary>
        /// 获取两时间差的元组
        /// </summary>
        /// <param name="DateTime1"></param>
        /// <param name="DateTime2"></param>
        /// <returns></returns>
        public static Tuple<int, int, int, int> DateDiff(DateTime DateTime1, DateTime DateTime2)
        {
            Tuple<int, int, int, int> tuple = null;
            try
            {
                TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
                TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
                TimeSpan ts = ts1.Subtract(ts2).Duration();
                tuple = new Tuple<int, int, int, int>(ts.Days, ts.Hours, ts.Minutes, ts.Seconds);
            }
            catch
            {

            }
            return tuple;
        }

Tuple<int, int, int, int> tuple = DateTimeUtil.DateDiff(Convert.ToDateTime(lastTime), DateTime.Now);
                        sec = tuple.Item1 * 24 * 60 * 60 + tuple.Item2 * 60 * 60 + tuple.Item3 * 60 + tuple.Item4;

回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 8 天

发表于 2022-9-14 02:06:02 | 显示全部楼层   重庆市重庆市
C#不是有TimeSpan吗?
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
 楼主| 发表于 2022-9-14 00:42:42 | 显示全部楼层   江苏省苏州市
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表