计算C#中的相对时间

计算C#中的相对时间

给出一个特定的DateTime值,如何显示相对时间,例如:

  • 2小时前
  • 三天前
  • 一个月前


FFIVE
浏览 649回答 3
3回答

紫衣仙女

你的代码使用常量(如CodeComplete中的建议)是很好的,但可能更清楚。const&nbsp;int&nbsp;SECOND&nbsp;=&nbsp;1;const&nbsp;int&nbsp;MINUTE&nbsp;=&nbsp;60&nbsp;*&nbsp;SECOND;const&nbsp;int&nbsp;HOUR&nbsp;=&nbsp;60&nbsp;*&nbsp;MINUTE;const&nbsp;int&nbsp;DAY&nbsp;=&nbsp;24&nbsp;*&nbsp;HOUR;const&nbsp;int&nbsp;MONTH&nbsp;=&nbsp;30&nbsp;*&nbsp;DAY; var&nbsp;ts&nbsp;=&nbsp;new&nbsp;TimeSpan(DateTime.UtcNow.Ticks&nbsp;-&nbsp;yourDate.Ticks);double&nbsp;delta&nbsp;=&nbsp;Math.Abs(ts.TotalSeconds);if&nbsp;(delta&nbsp;<&nbsp;1&nbsp;*&nbsp;MINUTE) &nbsp;&nbsp;return&nbsp;ts.Seconds&nbsp;==&nbsp;1&nbsp;?&nbsp;"one&nbsp;second&nbsp;ago"&nbsp;:&nbsp;ts.Seconds&nbsp;+&nbsp;"&nbsp;seconds&nbsp;ago";if&nbsp;(delta&nbsp;<&nbsp;2&nbsp;*&nbsp;MINUTE) &nbsp;&nbsp;return&nbsp;"a&nbsp;minute&nbsp;ago";if&nbsp;(delta&nbsp;<&nbsp;45&nbsp;*&nbsp;MINUTE) &nbsp;&nbsp;return&nbsp;ts.Minutes&nbsp;+&nbsp;"&nbsp;minutes&nbsp;ago";if&nbsp;(delta&nbsp;<&nbsp;90&nbsp;*&nbsp;MINUTE) &nbsp;&nbsp;return&nbsp;"an&nbsp;hour&nbsp;ago";if&nbsp;(delta&nbsp;<&nbsp;24&nbsp;*&nbsp;HOUR) &nbsp;&nbsp;return&nbsp;ts.Hours&nbsp;+&nbsp;"&nbsp;hours&nbsp;ago";if&nbsp;(delta&nbsp;<&nbsp;48&nbsp;*&nbsp;HOUR) &nbsp;&nbsp;return&nbsp;"yesterday";if&nbsp;(delta&nbsp;<&nbsp;30&nbsp;*&nbsp;DAY) &nbsp;&nbsp;return&nbsp;ts.Days&nbsp;+&nbsp;"&nbsp;days&nbsp;ago";if&nbsp;(delta&nbsp;<&nbsp;12&nbsp;*&nbsp;MONTH){ &nbsp;&nbsp;int&nbsp;months&nbsp;=&nbsp;Convert.ToInt32(Math.Floor((double)ts.Days&nbsp;/&nbsp;30)); &nbsp;&nbsp;return&nbsp;months&nbsp;<=&nbsp;1&nbsp;?&nbsp;"one&nbsp;month&nbsp;ago"&nbsp;:&nbsp;months&nbsp;+&nbsp;"&nbsp;months&nbsp;ago";}else{ &nbsp;&nbsp;int&nbsp;years&nbsp;=&nbsp;Convert.ToInt32(Math.Floor((double)ts.Days&nbsp;/&nbsp;365)); &nbsp;&nbsp;return&nbsp;years&nbsp;<=&nbsp;1&nbsp;?&nbsp;"one&nbsp;year&nbsp;ago"&nbsp;:&nbsp;years&nbsp;+&nbsp;"&nbsp;years&nbsp;ago";}

开满天机

我就是这样做的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 "a minute ago";}if (delta < 2700) // 45 * 60{   return ts.Minutes + " minutes ago";}if (delta < 5400) // 90 * 60{   return "an hour ago";}if (delta < 86400) // 24 * 60 * 60{   return ts.Hours + " hours ago";}if (delta < 172800) // 48 * 60 * 60{   return "yesterday";}if (delta < 2592000) // 30 * 24 * 60 * 60{   return ts.Days + " days ago";}if (delta < 31104000) // 12 * 30 * 24 * 60 * 60{   int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));   return months <= 1 ? "one month ago" : months + " months ago";}int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));   return years <= 1 ? "one year ago" : years + " years ago";
打开App,查看更多内容
随时随地看视频慕课网APP