[已解决问题] 求计算时间差值方法?
提问时间: 2007-11-29 13:24
浏览:876 次

在该社区提问后,表示的1分钟前,7天前,一周前,一个月前,等,这些通过时间计算方法,有没有简便的?


提问者:李.net - 菜鸟二级
最佳答案
castle monorail里自带两个方法,分别是:
public String AlternativeFriendlyFormatFromNow(DateTime date),
public String FriendlyFormatFromNow(DateTime date)

代码如下,希望对你有帮助:)


public String AlternativeFriendlyFormatFromNow(DateTime date)
{
TimeSpan now = new TimeSpan(DateTime.Now.Ticks);
TimeSpan cur = new TimeSpan(date.Ticks);

TimeSpan diff = now.Subtract(cur);

if (diff.TotalHours <= 24)
{
return "Today";
}
else if (diff.TotalHours <= 48)
{
return "Yesterday";
}
else if (diff.TotalDays <= 40)
{
return String.Format("{0} days ago", diff.Days);
}
else 
{
return String.Format("{0} months ago", (diff.Days / 30));
}
}

/// <summary>
/// Returns the difference from the 
/// specified <c>date</c> the the current date
/// in a friendly string like "1 day ago"
/// <para>
/// TODO: Think about i18n
/// </para>
/// </summary>
/// <param name="date">The date in the past (should be equal or less than now)</param>
/// <returns></returns>
public String FriendlyFormatFromNow(DateTime date)
{
TimeSpan now = new TimeSpan(DateTime.Now.Ticks);
TimeSpan cur = new TimeSpan(date.Ticks);

TimeSpan diff = now.Subtract(cur);

if (diff.TotalSeconds == 0)
{
return "Just now";
}

if (diff.Days == 0)
{
if (diff.Hours == 0)
{
if (diff.Minutes == 0)
{
return String.Format("{0} second{1} ago", 
diff.Seconds, diff.Seconds > 1 ? "s" : String.Empty);
}
else
{
return String.Format("{0} minute{1} ago", 
diff.Minutes, diff.Minutes > 1 ? "s" : String.Empty);
}
}
else
{
return String.Format("{0} hour{1} ago", 
diff.Hours, diff.Hours > 1 ? "s" :
2007/11/30 15:47:46 回答者:老刘.


提问者对于答案的评价:谢谢,已解决。
其它回答(8)
没听懂你的意思。不过DateTime类型有AddMinutes,AddSeconds方法,两个DateTime相减也能得到一个TimeSpan,应该够用了。
5个月前   回答者:Jeffrey Zhao - 小虾三级
不过是一种格式化时间罢了
5个月前   回答者:t-mac.NET - 菜鸟二级
.NET的DateTime结构支持加减运算,结果返回一个TimeSpan结构,TimeSpan自带相应字段
5个月前   回答者:狂人 - 菜鸟二级
.NET有自己的类可以实现对时间的差值计算,具体是什么你可以msdn一下.
5个月前   回答者:韩现龙 - 菜鸟二级
1分钟前,7天前,一周前,一个月前

不知道我题意是否理解正确了……
写一个类,可能要有个
public class Description
{Description(DateTime time){}
string GetTimeDescText()}
然后根据你的TimeSpan进行判断,回复一个(1分钟前,7天前,一周前,一个月前)

以后只用Description desc = new Description(DateTime.Now);
desc.GetTimeDescText();

5个月前   回答者:volnet(可以叫我大V) - 小虾三级
给你一个以前写的东东:)

           TimeSpan ts = serverDateTime - date;

            if ((int)ts.TotalDays >= 1)
                return (int)ts.TotalDays + "天前";
            else if ((int)ts.TotalHours >= 1)
                return (int)ts.TotalHours + "小时前";
            else 
                return ((int)ts.TotalMinutes>1?(int)ts.TotalMinutes:1) + "分钟前";
5个月前   回答者:wingoo - 小虾三级
如果在数据库里处理会快些吧
DATEADD
在向指定日期加上一段时间的基础上,返回新的 datetime 值。

语法
DATEADD ( datepart , number, date )
============
DATEDIFF
返回跨两个指定日期的日期和时间边界数。 

语法
DATEDIFF ( datepart , startdate , enddate ) 

=====用这些函数能帮助你。可以将提交回答的时间和当前时间比返回一个差值就Ok了
5个月前   回答者:Wilensky - 小虾三级
老刘的方法正确。
5个月前   回答者:guogu82 - 菜鸟二级
评论
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除