C#中的时间操作
时间区间计算
//当前时间的月初
//DateTime t_now = new DateTime(2008, 3, 1, 0, 0, 1);
DateTime t_now = new DateTime(2008, 3, 31, 23, 59, 59);
DateTime monthBegin = t_now.Date.AddDays(1 - t_now.Day);//减当前天数后加1
Response.Write(monthBegin.ToString("yyyy-MM-dd HH:mm:ss"));
Response.Write("<br/>");
//上个月的月初
DateTime lastMonthBegin = t_now.AddMonths(-1).Date.AddDays(1-t_now.AddMonths(-1).Day);
Response.Write(lastMonthBegin.ToString("yyyy-MM-dd HH:mm:ss"));
Response.Write("<br/>");
//上个月的月末
DateTime lastMonthEnd = lastMonthBegin.AddMonths(1) ;
//注意上月月末的最后一微秒时间无限接近于当前月的最初一微小时间
//计算时取区间是[lastMonthBegin,lastMonthEnd)--可取下限不能取上限
Response.Write(lastMonthEnd.ToString("yyyy-MM-dd HH:mm:ss"));
//上个月的有效果天数
Response.Write("<br/>");
Response.Write((lastMonthEnd - lastMonthBegin).TotalDays.ToString());
两时间差
如: 执行某一操作,接着判断这一操作进行的绝对时间(按秒计算)
Datetime a=DateTime.Now;
do.....
TimeSpan ts= DateTime.Now -a ;
if(ts.TotalSeconds >=60){
do....
}
注意的是 一般情况下判断2个时间差是否超过某一绝对值, 是将两时间相减后 取Totalxxx ,如果直接比较(ts.Seconds>=60) 那么这个判断永远是false,因为 ts.Seconds 永远不等于 60 (时间是满60秒为一分)
使用时需要注意.
今天就在使用中因为没搞清楚化了不少时间.
打算使用Application保存用户 执行页面生成的进度信息,由于是多用户的,所以使用Application[Guid]来区分用户的操作,
为了及时回收Application使用过的内存,需要在每次启动页面生成作业时将过期的Application[Guid] 清理掉(使用Remove)
这样能保证Application在一能接受的数量内,但是当我将过期时间设置为60秒时,发现无论等多久已经分配application就是无法回收,后来发现是这个问题.
另外没有使用Cache 是因为Application在多数时候比Cache稳定,而Cache在服务器资源不是很充足的情况下,往往会提前被释放,或者根本申请不到, 当然这个设计在存在大量并发时也是个问题. 需要定期运行一个清理程序