【发布时间】:2011-01-09 11:43:40
【问题描述】:
嗨,
如何像 SO 那样格式化日期时间?
1 分钟前
1 小时前
8 月 15 日 15:00 询问
【问题讨论】:
-
当前日期时间-发布日期时间。然后根据秒、分、小时格式化字符串?
-
骗了第十一个问题。不错。
标签: c# datetime datetime-format
嗨,
如何像 SO 那样格式化日期时间?
1 分钟前
1 小时前
8 月 15 日 15:00 询问
【问题讨论】:
标签: c# datetime datetime-format
您可能有兴趣将 jQuery's timeago plugin 移植到 C#
【讨论】:
查看DateTime.ToString() Patterns。如果没有你喜欢的,你可以自己指定。
【讨论】:
您需要做的第一件事是确定日期的差异。
在您的DateTime 上使用 Subtract() 方法。它返回一个TimeSpan,可以方便地满足您的需求。
TimeSpan mySpan = DateTime.Now.Subtract( myPostedDate );
然后,您需要找到最重要的非零时间元素。如果你正在处理几天,事情就很容易了。较小的面额需要更多的工作。包含代码。
TimeSpan mySpan = DateTime.Now.Subtract(myRecorded);
string myDenom =
mySpan.Days > 0 ? "day" :
mySpan.Hours > 0 ? "hour" :
mySpan.Minutes > 0 ? "minute" : "second";
string myOutput = String.Empty;
int myNumeral;
// if we're dealing with days, a format string will suffice
if (myDenom == "day")
{
// HH - 24 hour clock
myOutput = String.Format("{0:MMM dd} at {0:HH}:{0:mm}", myRecorded);
}
else
{
// put the right denomination into myNumeral
switch (myDenom)
{
case "second":
myNumeral = mySpan.Seconds;
break;
case "minute":
myNumeral = mySpan.Minutes;
break;
default:
myNumeral = mySpan.Hours;
break;
}
// add an s to myNumeral when > 1
myDenom += (myNumeral > 1) ? "s" : String.Empty;
myOutput = String.Format("{0} {1} ago", myNumeral, myDenom);
}
// myOutput now contains formatted string
【讨论】: