/// <summary>
        /// 返回时间比较
        /// </summary>
        /// <param name="unit">单位</param>
        /// <param name="time"></param>
        /// <param name="time1"></param>
        /// <returns></returns>
        private int DateDiff(string unit,DateTime beginTime, DateTime endTime)
        {
            if (unit.ToUpper() == "ss".ToUpper() || unit.ToUpper() == "s".ToUpper())
            {                int second = beginTime.Second - endTime.Second;  
                int minute = beginTime.Minute - endTime.Minute;
                int hour = beginTime.Hour - endTime.Hour;
                             
                if (hour > 0)
                {
                    minute = hour * 60 + minute;
                }                if (minute > 0)
                {
                    second = minute * 60 + second;
                }
                return second;
            }
            if (unit.ToUpper() == "mi".ToUpper() || unit.ToUpper() == "n".ToUpper())
            {
                int hour = beginTime.Hour - endTime.Hour;
                int minute = beginTime.Minute - endTime.Minute;
                if (beginTime.Hour > endTime.Hour)
                {
                    minute = hour * 60 + minute;
                }
                return minute;
            }
            if (unit.ToUpper() == "dd".ToUpper() || unit.ToUpper() == "d".ToUpper())
            {
                int day = beginTime.Day - endTime.Day;
                int month = beginTime.Month - endTime.Month;
                if (month > 0)
                {
                    day = month * 30 + day;
                }
                return day;
            }
            if (unit.ToUpper() == "hh".ToUpper())
            {
                int hour = beginTime.Hour - endTime.Hour;
                int day = beginTime.Day - endTime.Day;
                if (day > 0)
                {
                    hour = day * 24 + hour;
                }
                return hour;
            }
            return 0;
        }
我想在那个再添加一月的判断,应该怎么添加啊。或者说把年、月、日、时、分、秒都考虑到,写一个比较全面的判断应该怎么写啊?

解决方案 »

  1.   

    LZ这个函数干啥用啊?
    LZ最好先说明用途,说出你想实现什么功能,只给认看函数,谁知道你最终想要达到什么效果?
      

  2.   

     private int DateDiff(string unit, DateTime beginTime, DateTime endTime)
            {
                
                TimeSpan res = endTime - beginTime;
                return (int)(res.Ticks / 10000000);
            }返回的是秒
      

  3.   

    为什么不用DateTime类封装的方法?
      

  4.   

    time.Date.day
    time.Date.Month
    time.Date.Year
      

  5.   

    嗯,不用那么麻烦除10000000了
    直接返回res.Seconds即可也可以返回
    TimeSpan.Hours或者TimeSpan.Minutes
      

  6.   

    DateTime   d1; 
    DateTime   d2; TimeSpan   t   =   d2-d1; long   days   =   (long)t.TotalDays;
    返回天数
      

  7.   

    时间类型是可以直接用-号得到一个timespan类型的,这个timespan可以直接得到相隔时间,不过最大的单位只能是天,因为一个月有几天(28,20,31)?一年有几天(365,366)?这些都是不确定的
      

  8.   

    DateTime.Now.Day
    DateTime.Now.Month
    DateTime.Now.Year这是上周的时间段
    string begintime = (DateTime.Now.AddDays(-(6 + (int)DateTime.Now.DayOfWeek))).ToShortDateString();
                string endtime = (DateTime.Now.AddDays(-((int)DateTime.Now.DayOfWeek)+1)).ToShortDateString();   
      
    本周的时间段
    string begiontiem = (DateTime.Now.AddDays(+1 - (int)DateTime.Now.DayOfWeek)).ToShortDateString();
                string endtime = (DateTime.Now.AddDays(+8 - ((int)DateTime.Now.DayOfWeek))).ToShortDateString();
      

  9.   

      /// <summary>全局时间
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void _Timer_Tick(object sender, EventArgs e)
            {
                txtRunTime.Text = string.Format("运行时间: {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                if (_planArray.Tables.Count != 0)
                {
                    DateTime time = DateTime.Now;  
                    foreach (DataRow row in _planArray.Tables[0].Rows)  //遍历计划表
                    {
                        if (row["TaskStatus"].ToString() == TeskState.Running.ToString() || row["TaskStatus"].ToString() == TeskState.LoseEfficacy.ToString())
                        {
                            continue;   //如果在运行中则退出
                        }
                        if (Convert.ToInt32(row["PlanType"]) == Convert.ToInt32(TeskType.Interval))
                        {
                            int timerUnit = Convert.ToInt32(row["TimeUnit"]);       //时间单位
                            DateTime lastTime = DateTime.MinValue;
                            if (row["LastExecTime"] != DBNull.Value)
                            {
                                lastTime = Convert.ToDateTime(row["LastExecTime"]);    //最后执行时间
                            }
                            int interval = Convert.ToInt32(row["Interval"]);    //获取时间间隔以便于下面单位换算
                            DateTime beginTime = Convert.ToDateTime(row["BeginTime"]);  //有效时间的开始时间
                            DateTime endTime = Convert.ToDateTime(row["EndTime"]);    //有效时间的结束时间
                            beginTime = Convert.ToDateTime(beginTime.ToString("2010-01-01 HH:mm:ss"));
                            endTime = Convert.ToDateTime(endTime.ToString("2010-01-01 HH:mm:ss"));
                            DateTime tempTime = Convert.ToDateTime(time.ToString("2010-01-01 HH:mm:ss"));
                            //判断当前时间是否满足执行的时间范围
                            if (DateTime.Compare(tempTime, beginTime) >= 0 && DateTime.Compare(tempTime, endTime) <= 0)
                            {
                                if (timerUnit == Convert.ToInt32(TimeUnit.Second))  //判断是否满足执行间隔数的条件
                                {
                                    if (lastTime == DateTime.MinValue || DateDiff("ss", time, lastTime) >= interval)
                                    {
                                        StartWorker(row);
                                    }
                                }
                                else if (timerUnit == Convert.ToInt32(TimeUnit.Minute))
                                {
                                    if (lastTime == DateTime.MinValue || DateDiff("mi", time, lastTime) >= interval)
                                    {
                                        StartWorker(row);
                                    }
                                }
                                else if (timerUnit == Convert.ToInt32(TimeUnit.Hour))
                                {
                                    if (lastTime == DateTime.MinValue || DateDiff("hh", time, lastTime) >= interval)
                                    {
                                        StartWorker(row);
                                    }
                                }
                                else if (timerUnit == Convert.ToInt32(TimeUnit.Day))
                                {
                                    if (lastTime == DateTime.MinValue || DateDiff("dd", time, lastTime) >= interval)
                                    {
                                        StartWorker(row);
                                    }
                                }                        }
                        }
                        else
                        {
                            if (row["LastExecTime"] == DBNull.Value)   //判断是否已执行该任务
                            {
                                DateTime beginTime = Convert.ToDateTime(row["BeginTime"]);
                                if (DateTime.Compare(time,beginTime) >= 0)
                                {
                                    StartWorker(row);
                                }                        }
                        }
                    }
                    
                }
            }
    时间跟时间单位都是下拉列表框的形式,时间单位有四种天、时、分、秒
    根据单位  判断任务要执行多久  
      

  10.   

    大段代码贴的时候加上UBB标记你的代码写在这里会有缩进 
      

  11.   

    两个时间的时间差:private void button1_Click(object sender, EventArgs e)
    {
        DateTime beginTime = DateTime.Parse("2008-01-06");
        DateTime endTime = DateTime.Parse("2010-06-03");
        TimeSpan ts = endTime - beginTime;    MessageBox.Show((endTime.Year - beginTime.Year).ToString());                                             //年
        MessageBox.Show((endTime.Year * 12 + endTime.Month - beginTime.Year * 12 - beginTime.Month).ToString()); //月
        MessageBox.Show(ts.TotalDays.ToString());                                 //天
        MessageBox.Show(ts.TotalHours.ToString());                                //小时
        MessageBox.Show(ts.TotalMinutes.ToString());                               //分
        MessageBox.Show(ts.TotalSeconds.ToString());                               //秒
        MessageBox.Show(ts.TotalMilliseconds.ToString());                             //毫秒
    }
      

  12.   

        DateTime dt = new DateTime();
                    dt.AddMonths(34);    DateTime dt = new DateTime();
                    dt.AddMonths(34);加月,同样还有加年,加日。
      

  13.   

    代码太多。没仔细看,这样功能用系统的
    Datetime dt1 = ...
    Datetime dt2 = ...
    TimeSpan ts = dt2 - dt1;
    ts的成员方法有差值的年月日时分秒毫秒
      

  14.   

    DateTime timeStart = DateTime.Parse(txtTimeStart.Text.Trim());
    DateTime timeEnd = DateTime.Parse(txtTimeEnd.Text.Trim());
    timeEnd = timeEnd.AddDays(1); TimeSpan ts = timeEnd - timeStart; if (ts.Days >= 0 && ts.Days <= 60) //同理 可以month ,year
    {doSomething.....}
      

  15.   

    这是7个最基本的物理单位之一哦,呵呵,所有的物理单位都是他们推导出来的,只有这7个是定义的,应该要记住。长度:m(米)
    时间:s(秒)
    质量:kg(千克)
    温度:k(开尔文)
    物质的量:mol(摩尔)
    电流强度:A(安培)
    发光强度:cd(坎德拉)
      

  16.   

    建议你看一下datetime类中的Month等属性 可以Add(-1):上个月
      

  17.   

    DateTime dt  =  DateTime.Now;   // 当前时间
    DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") 24小时制
    DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")  12小时制
     
    DateTime startWeek  =  dt.AddDays( 1   -  Convert.ToInt32(dt.DayOfWeek.ToString( " d " )));   //本 周周一 
    DateTime endWeek  =  startWeek.AddDays( 6 );   //本 周周日 
     
    DateTime startMonth  =  dt.AddDays( 1   -  dt.Day);   //本月 月初 
    DateTime endMonth  =  startMonth.AddMonths( 1 ).AddDays( - 1 );   //本月 月末
    // DateTime endMonth = startMonth.AddDays((dt.AddMonths(1) - dt).Days - 1);   //本月 月末 
     
    DateTime startQuarter  =  dt.AddMonths( 0   -  (dt.Month  -   1 )  %   3 ).AddDays( 1   -  dt.Day);   //本 季度初 
    DateTime endQuarter  =  startQuarter.AddMonths( 3 ).AddDays( - 1 );   //本 季度末 
     
    DateTime startYear  =   new  DateTime(dt.Year,  1 ,  1 );   //本年 年初 
    DateTime endYear  =   new  DateTime(dt.Year,  12 ,  31 );   //本年 年末  至于昨天、明天、上周、上月、上季度、上年度等等,只要AddDays()、AddMonths()、AddYears()这几种方法组合一下就可以了。C#中datetime的使用 
                    //如本年度销售额、本季度利润、本月新增客户
                    //C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了
                   
                    //今天
                    DateTime.Now.Date.ToShortDateString();
                    //昨天,就是今天的日期减一
                    DateTime.Now.AddDays(-1).ToShortDateString();
                    //明天,同理,加一
                    DateTime.Now.AddDays(1).ToShortDateString();
                    //本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止
                    DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
                    DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
                    //如果你还不明白,再看一下中文显示星期几的方法就应该懂了
                    //由于DayOfWeek返回的是数字的星期几,我们要把它转换成汉字方便我们阅读,有些人可能会用switch来一个一个地对照,其实不用那么麻烦的              
                    string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                    Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];                //上周,同理,一个周是7天,上周就是本周再减去7天,下周也是一样
                    DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
                    DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
                    //下周
                    DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
                    DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
                    //本月,很多人都会说本月的第一天嘛肯定是1号,最后一天就是下个月一号再减一天。当然这是对的
                    //一般的写法
                    DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1"; //第一天
                    DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最后一天                //巧用C#里ToString的字符格式化更简便
                    DateTime.Now.ToString("yyyy-MM-01");
                    DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();                //上个月,减去一个月份
                    DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();
                    DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
                    //下个月,加去一个月份
                    DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();
                    DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();
                    //7天后
                    DateTime.Now.Date.ToShortDateString();
                    DateTime.Now.AddDays(7).ToShortDateString();
                    //7天前
                    DateTime.Now.AddDays(-7).ToShortDateString();
                    DateTime.Now.Date.ToShortDateString();                //本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天
                    DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();
                    DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();
                    //上年度,不用再解释了吧
                    DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();
                    DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();
                    //下年度
                    DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();
                    DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();                //本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月
                    //首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了
                    DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
                    //同理,本季度的最后一天就是下季度的第一天减一
                    DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
                    //下季度,相信你们都知道了。收工
                    DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
                    DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
                    //上季度
                    DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
                    DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString