C# 格式像facebook一样随着时间流逝
有人知道如何将给定的时间跨度格式化为facebook那样的格式吗 i、 e 30秒前,大约一小时前,昨天晚上8:37等等C# 格式像facebook一样随着时间流逝,c#,datetime,formatting,C#,Datetime,Formatting,有人知道如何将给定的时间跨度格式化为facebook那样的格式吗 i、 e 30秒前,大约一小时前,昨天晚上8:37等等 谢谢 我只需要一个静态字符串函数,您可以在其中定义一组“规则”,然后您可以创建一个时间跨度,并根据您的规则返回字符串 伪代码 例如,如果时间跨度小于1分钟,则返回“About timespan.TotalSeconds ago” 编辑实际样本 public static string GetTimeText(DateTime eventTime) { var
谢谢 我只需要一个静态字符串函数,您可以在其中定义一组“规则”,然后您可以创建一个时间跨度,并根据您的规则返回字符串 伪代码 例如,如果时间跨度小于1分钟,则返回“About timespan.TotalSeconds ago” 编辑实际样本
public static string GetTimeText(DateTime eventTime)
{
var span = (DateTime.Now - eventTime);
if(span.TotalSeconds < 60 )
{
return string.Format("about {0} seconds ago", span.TotalSeconds);
}
if(span.TotalMinutes < 60)
{
return string.Format("about {0} minutes ago", span.TotalMinutes);
}
...
}
public静态字符串GetTimeText(DateTime eventTime)
{
var span=(DateTime.Now-eventTime);
如果(span.TotalSeconds<60)
{
返回string.Format(“大约{0}秒前”,span.TotalSeconds);
}
如果(总分钟数<60)
{
返回string.Format(“大约{0}分钟前”,span.TotalMinutes);
}
...
}
查看问题的答案。这是以前做过的
下面的代码是从上述问题的答案复制而来的
const int SECOND = 1;
const int MINUTE = 60 * SECOND;
const int HOUR = 60 * MINUTE;
const int DAY = 24 * HOUR;
const int MONTH = 30 * DAY;
if (delta < 0)
{
return "not yet";
}
if (delta < 1 * MINUTE)
{
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
}
if (delta < 2 * MINUTE)
{
return "a minute ago";
}
if (delta < 45 * MINUTE)
{
return ts.Minutes + " minutes ago";
}
if (delta < 90 * MINUTE)
{
return "an hour ago";
}
if (delta < 24 * HOUR)
{
return ts.Hours + " hours ago";
}
if (delta < 48 * HOUR)
{
return "yesterday";
}
if (delta < 30 * DAY)
{
return ts.Days + " days ago";
}
if (delta < 12 * MONTH)
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "one month ago" : months + " months ago";
}
else
{
int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "one year ago" : years + " years ago";
}
const int SECOND=1;
常数int分钟=60*秒;
常数整小时=60*分钟;
常数整数天=24*小时;
const int MONTH=30*天;
if(δ<0)
{
返回“尚未”;
}
如果(增量<1*分钟)
{
返回ts.Seconds==1?“一秒前”:ts.Seconds+“秒前”;
}
如果(增量<2*分钟)
{
返回“一分钟前”;
}
如果(增量<45*分钟)
{
返回ts.Minutes+“分钟前”;
}
如果(增量<90*分钟)
{
返回“一小时前”;
}
如果(增量<24*小时)
{
返回ts.Hours+“Hours ago”;
}
如果(增量<48*小时)
{
返回“昨天”;
}
如果(增量<30*天)
{
返回ts.天+天之前;
}
如果(δ<12*个月)
{
整数月份=换算为32(数学下限((双)ts.Days/30));
返回月份类似于以下内容:
StringBuilder rv = new StringBuilder();
TimeSpan ts = DateTime.Now - lastCommunicationDateTime;
if (ts.TotalDays >= 1.0)
{
rv.AppendFormat("{0} days, {1} hours ago", (int)ts.TotalDays, ts.Hours);
}
else if (ts.TotalHours > 1.0)
{
rv.AppendFormat("{0} hours, {1} minutes ago", (int)ts.TotalHours, ts.Minutes);
}
else if (ts.TotalMinutes > 1.0)
{
rv.AppendFormat("{0} minutes, {1} seconds ago", (int)ts.TotalMinutes, ts.Seconds);
}
else
{
rv.AppendFormat("{0} seconds ago", (int)ts.TotalSeconds);
}
return rv.ToString();
如果您需要显示周、月、季度和年,可以使用以下的DateDiff类:
// ----------------------------------------------------------------------
public void DateDiffSample()
{
DateTime date1 = new DateTime( 2009, 11, 8, 7, 13, 59 );
Console.WriteLine( "Date1: {0}", date1 );
// > Date1: 08.11.2009 07:13:59
DateTime date2 = new DateTime( 2011, 3, 20, 19, 55, 28 );
Console.WriteLine( "Date2: {0}", date2 );
// > Date2: 20.03.2011 19:55:28
DateDiff dateDiff = new DateDiff( date1, date2 );
// differences
Console.WriteLine( "DateDiff.Years: {0}", dateDiff.Years );
// > DateDiff.Years: 1
Console.WriteLine( "DateDiff.Quarters: {0}", dateDiff.Quarters );
// > DateDiff.Quarters: 5
Console.WriteLine( "DateDiff.Months: {0}", dateDiff.Months );
// > DateDiff.Months: 16
Console.WriteLine( "DateDiff.Weeks: {0}", dateDiff.Weeks );
// > DateDiff.Weeks: 70
Console.WriteLine( "DateDiff.Days: {0}", dateDiff.Days );
// > DateDiff.Days: 497
Console.WriteLine( "DateDiff.Weekdays: {0}", dateDiff.Weekdays );
// > DateDiff.Weekdays: 71
Console.WriteLine( "DateDiff.Hours: {0}", dateDiff.Hours );
// > DateDiff.Hours: 11940
Console.WriteLine( "DateDiff.Minutes: {0}", dateDiff.Minutes );
// > DateDiff.Minutes: 716441
Console.WriteLine( "DateDiff.Seconds: {0}", dateDiff.Seconds );
// > DateDiff.Seconds: 42986489
// elapsed
Console.WriteLine( "DateDiff.ElapsedYears: {0}", dateDiff.ElapsedYears );
// > DateDiff.ElapsedYears: 1
Console.WriteLine( "DateDiff.ElapsedMonths: {0}", dateDiff.ElapsedMonths );
// > DateDiff.ElapsedMonths: 4
Console.WriteLine( "DateDiff.ElapsedDays: {0}", dateDiff.ElapsedDays );
// > DateDiff.ElapsedDays: 12
Console.WriteLine( "DateDiff.ElapsedHours: {0}", dateDiff.ElapsedHours );
// > DateDiff.ElapsedHours: 12
Console.WriteLine( "DateDiff.ElapsedMinutes: {0}", dateDiff.ElapsedMinutes );
// > DateDiff.ElapsedMinutes: 41
Console.WriteLine( "DateDiff.ElapsedSeconds: {0}", dateDiff.ElapsedSeconds );
// > DateDiff.ElapsedSeconds: 29
// description
Console.WriteLine( "DateDiff.GetDescription(1): {0}", dateDiff.GetDescription( 1 ) );
// > DateDiff.GetDescription(1): 1 Year
Console.WriteLine( "DateDiff.GetDescription(2): {0}", dateDiff.GetDescription( 2 ) );
// > DateDiff.GetDescription(2): 1 Year 4 Months
Console.WriteLine( "DateDiff.GetDescription(3): {0}", dateDiff.GetDescription( 3 ) );
// > DateDiff.GetDescription(3): 1 Year 4 Months 12 Days
Console.WriteLine( "DateDiff.GetDescription(4): {0}", dateDiff.GetDescription( 4 ) );
// > DateDiff.GetDescription(4): 1 Year 4 Months 12 Days 12 Hours
Console.WriteLine( "DateDiff.GetDescription(5): {0}", dateDiff.GetDescription( 5 ) );
// > DateDiff.GetDescription(5): 1 Year 4 Months 12 Days 12 Hours 41 Mins
Console.WriteLine( "DateDiff.GetDescription(6): {0}", dateDiff.GetDescription( 6 ) );
// > DateDiff.GetDescription(6): 1 Year 4 Months 12 Days 12 Hours 41 Mins 29 Secs
} // DateDiffSample