时间保存在'DateTime'值中,如何显示为相对时间,比如显示:
- 2小时前
- 3天前
- 一个月前
解决方案
这是我的方法
var ts = new TimeSpan(DateTime.UtcNow.Ticks - dt.Ticks);
double delta = Math.Abs(ts.TotalSeconds);
if (delta < 60)
{
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
}
if (delta < 120)
{
return "1分钟前";
}
if (delta < 2700) //45 * 60
{
return ts.Minutes + " 分钟前";
}
if (delta < 5400) //90 * 60
{
return "1小时前";
}
if (delta < 86400) //24 * 60 * 60
{
return ts.Hours + " 小时前";
}
if (delta < 172800) //48 * 60 * 60
{
return "昨天";
}
if (delta < 2592000) //30 * 24 * 60 * 60
{
return ts.Days + " 天前";
}
if (delta < 31104000) //12 * 30 * 24 * 60 * 60
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days/30));
return months <= 1 ? "一个月之前" : months + " 月前";
}
int years = Convert.ToInt32(Math.Floor((double)ts.Days/365));
return years <= 1 ? "1年前" : years + " 年前";
或者
public static string ToLongString(this TimeSpan time)
{
string output = String.Empty;
if (time.Days > 0)
output += time.Days + " 天 ";
if ((time.Days == 0 || time.Days == 1) && time.Hours > 0)
output += time.Hours + " 小时 ";
if (time.Days == 0 && time.Minutes > 0)
output += time.Minutes + " 分 ";
if (output.Length == 0)
output += time.Seconds + " 秒";
return output.Trim();
}
或者使用这个简洁版本:
public static string RelativeDate(DateTime theDate)
{
Dictionary<long, string> thresholds = new Dictionary<long, string>();
int minute = 60;
int hour = 60 * minute;
int day = 24 * hour;
thresholds.Add(60, "{0} 秒前");
thresholds.Add(minute * 2, "1分钟前");
thresholds.Add(45 * minute, "{0} 分钟前");
thresholds.Add(120 * minute, "1小时前");
thresholds.Add(day, "{0} 小时前");
thresholds.Add(day * 2, "昨天");
thresholds.Add(day * 30, "{0} 天前");
thresholds.Add(day * 365, "{0} 月前");
thresholds.Add(long.MaxValue, "{0} 年前");
long since = (DateTime.Now.Ticks - theDate.Ticks)/10000000;
foreach (long threshold in thresholds.Keys)
{
if (since < threshold)
{
TimeSpan t = new TimeSpan((DateTime.Now.Ticks - theDate.Ticks));
return string.Format(thresholds[threshold], (t.Days > 365 ? t.Days/365 : (t.Days > 0 ? t.Days : (t.Hours > 0 ? t.Hours : (t.Minutes > 0 ? t.Minutes : (t.Seconds > 0 ? t.Seconds : 0))))).ToString());
}
}
return "";
}
日期:2020-03-23 10:15:00 来源:oir作者:oir
