Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 格式像facebook一样随着时间流逝_C#_Datetime_Formatting - Fatal编程技术网

C# 格式像facebook一样随着时间流逝

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

有人知道如何将给定的时间跨度格式化为facebook那样的格式吗

i、 e

30秒前,大约一小时前,昨天晚上8:37等等


谢谢

我只需要一个静态字符串函数,您可以在其中定义一组“规则”,然后您可以创建一个时间跨度,并根据您的规则返回字符串

伪代码

例如,如果时间跨度小于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