像 *** 一样格式化 DateTime [重复]

Posted

技术标签:

【中文标题】像 *** 一样格式化 DateTime [重复]【英文标题】:Format DateTime like *** [duplicate] 【发布时间】:2011-01-09 11:43:40 【问题描述】:

可能的重复:Fuzzy date algorithmHow do I calculate relative time?

嗨,

如何像 SO 那样格式化日期时间?

1 分钟前

1 小时前

8 月 15 日 15:00 询问

【问题讨论】:

看这里***.com/questions/822124/fuzzy-date-algorithm 当前日期时间-发布日期时间。然后根据秒、分、小时格式化字符串? 甚至更早:***.com/questions/11/how-do-i-calculate-relative-time 骗了第十一个问题。不错。 【参考方案1】:

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

【讨论】:

【参考方案2】:

查看DateTime.ToString() Patterns。如果没有你喜欢的,你可以自己指定。

【讨论】:

【参考方案3】:

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

在您的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

【讨论】:

以上是关于像 *** 一样格式化 DateTime [重复]的主要内容,如果未能解决你的问题,请参考以下文章

NewtonJson DateTime 格式序列化

像facebook消息系统一样计算时差[重复]

pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]

to_datetime - ValueError:时间数据'31/03/21 00'与格式'dd/mm/YY HH'不匹配(匹配)[重复]

C#:将 Datetime.Now 解析为特定的 fromat [重复]

颤振格式日期时间[重复]