像StackoverFlow一样格式化DateTime

时间:2010-01-26 11:27:14

标签: c# datetime datetime-format

  

可能重复:
  Fuzzy date algorithm
  How do I calculate relative time?

您好,

如何格式化日期时间,如SO?

1分钟前

1小时前

8月15日15:00问道

3 个答案:

答案 0 :(得分:2)

您需要做的第一件事是确定日期的差异。

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

答案 1 :(得分:1)

您可能有兴趣将jQuery's timeago plugin移植到C#

答案 2 :(得分:0)

结帐DateTime.ToString() Patterns。如果没有您喜欢的东西,可以自己指定。