/// <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;
}
我想在那个再添加一月的判断,应该怎么添加啊。或者说把年、月、日、时、分、秒都考虑到,写一个比较全面的判断应该怎么写啊?
/// 返回时间比较
/// </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;
}
我想在那个再添加一月的判断,应该怎么添加啊。或者说把年、月、日、时、分、秒都考虑到,写一个比较全面的判断应该怎么写啊?
解决方案 »
- 第一行:'&'附近有语法错误
- 新手指教:label的BackColor问题
- 初学者提问,asp.net的后台代码是在SERVER上还是在Client上运行的?
- C#文本编辑器双击打开文件,并读取文件内容
- datagridview怎么能得到一列的所有行的值?
- c# 多线程复制文件 堵塞问题
- 我想试一下udp发信息 然后用到Receive方法 每次一运行到哪里都会未响应
- linq语句问题
- 如何获取其他程序中的Internet Server Explorer中的HtmlDoucment对象
- 救命啊,求Bittorrent 3.1.zip
- wcf远程调用服务器问题。。。急!!
- 如何通过前台调用后台带参数的函数
LZ最好先说明用途,说出你想实现什么功能,只给认看函数,谁知道你最终想要达到什么效果?
{
TimeSpan res = endTime - beginTime;
return (int)(res.Ticks / 10000000);
}返回的是秒
time.Date.Month
time.Date.Year
直接返回res.Seconds即可也可以返回
TimeSpan.Hours或者TimeSpan.Minutes
DateTime d2; TimeSpan t = d2-d1; long days = (long)t.TotalDays;
返回天数
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();
///
/// </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);
} }
}
}
}
}
时间跟时间单位都是下拉列表框的形式,时间单位有四种天、时、分、秒
根据单位 判断任务要执行多久
{
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()); //毫秒
}
dt.AddMonths(34); DateTime dt = new DateTime();
dt.AddMonths(34);加月,同样还有加年,加日。
Datetime dt1 = ...
Datetime dt2 = ...
TimeSpan ts = dt2 - dt1;
ts的成员方法有差值的年月日时分秒毫秒
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.....}
时间:s(秒)
质量:kg(千克)
温度:k(开尔文)
物质的量:mol(摩尔)
电流强度:A(安培)
发光强度:cd(坎德拉)
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