Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# 如何将日期转换为字符串格式。?_C# - Fatal编程技术网

C# 如何将日期转换为字符串格式。?

C# 如何将日期转换为字符串格式。?,c#,C#,可能重复: 我想将日期值转换为字符串格式,就像YouTube视频上载的时间或日期一样,例如2年前、1个月前或8小时前,就像这样,假设我有简单的日期作为输出 谢谢你 从这里开始 我相信你要做的是使用TimeSpan来确定现在和发布日期之间的差异。您将不得不对结果进行一些处理,但您可以计算出有多少小时/分钟/天/年是不同的。 一旦你得到了时间跨度,你就可以使用time span class exposes的属性来计算年、月、日等。我想你是在寻找类似timeago算法的东西 您可以使用以下内容:

可能重复:

我想将日期值转换为字符串格式,就像YouTube视频上载的时间或日期一样,例如2年前、1个月前或8小时前,就像这样,假设我有简单的日期作为输出

谢谢你

从这里开始

我相信你要做的是使用TimeSpan来确定现在和发布日期之间的差异。您将不得不对结果进行一些处理,但您可以计算出有多少小时/分钟/天/年是不同的。


一旦你得到了时间跨度,你就可以使用time span class exposes的属性来计算年、月、日等。我想你是在寻找类似timeago算法的东西

您可以使用以下内容:

    static void Main(string[] args)
    {
        Console.WriteLine(GetDifferenceDate(new DateTime(2011, 11, 25, 10, 30, 2), 
            new DateTime(2012, 1, 2, 6, 3, 5)));
    }

    static string GetDifferenceDate(DateTime date1, DateTime date2)
    {
        if (DateTime.Compare(date1, date2) >= 0)
        {
            TimeSpan ts = date1.Subtract(date2);
            return string.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
                ts.Days, ts.Hours, ts.Minutes, ts.Seconds);
        }
        else
            return "Not valid";
    }
Stackoverflow上有一个类似的问题,您必须看到:

有关更多详细信息,请参阅:


希望这能有所帮助。

我几年前就写过这个函数,看起来这就是你想要的

public static string GetTimeElpased(int secondsElpased, int minutesElpased, int hoursElpased,
    int daysElpased, int monthsElpased, int yearsElpased)
{
    if (secondsElpased < 30)
        return "few seconds ago";

    if (minutesElpased < 1)
        return secondsElpased + " seconds ago";

    if (minutesElpased < 5)
        return "few minutes ago";

    if (hoursElpased < 1)
        return minutesElpased + " minutes ago";

    if (hoursElpased < 5)
        return "few hours ago";

    if (daysElpased < 1)
        return hoursElpased + " hours ago";

    if (daysElpased == 1)
        return "yesterday";

    if (monthsElpased < 1)
    return daysElpased + " days ago";

    if (monthsElpased == 1)
        return "month ago";

    if (yearsElpased < 1)
        return monthsElpased + " months ago";

    string halfYear = (monthsElpased >= 6) ? " and half" : "";
    if (yearsElpased == 1)
        return "year" + halfYear + " ago";

    return yearsElpased + " years ago";
}
公共静态字符串GetTimeElpased(int secondsElpased、int minutesElpased、int hoursElpased、,
整数日selpased,整数月selpased,整数年selpased)
{
如果(第二选择<30)
返回“几秒钟前”;
如果(分钟数小于1)
返回secondsElpased+“秒前”;
如果(分钟数小于5)
返回“几分钟前”;
如果(小时数小于1)
返回分钟selpased+“分钟前”;
如果(小时数小于5)
返回“几个小时前”;
如果(daysElpased<1)
return hourselpase+“小时前”;
如果(daysElpased==1)
返回“昨天”;
如果(月数<1)
return daysElpased+“天以前”;
如果(月数==1)
返回“一个月前”;
如果(年份选择<1)
返回monthsElpased+“几个月前”;
字符串半年=(monthsElpased>=6)?“和半年”:“”;
如果(yearsElpased==1)
返回“年”+半年+“以前”;
return yearsElpased+“年前”;
}
有关更完整/详细的功能,请参见其他问题。()

您需要从当前日期中减去日期。这将为您提供一个表示两个日期之间差异的
TimeSpan
值。您必须自己编写将此
TimeSpan
转换为可读文本的逻辑:

TimeSpan d = DateTime.Now - someDate;
if (d.TotalSeconds < 59)
{
  return d.TotalSeconds + " second(s) ago";
}
else if (d.TotalMinutes < 59)
{
  return d.TotalMinutes + " minute(s) ago";
} 
else if (d.TotalHours < 23)
{
  return d.TotalHours + " hour(s) ago";
}

// days, weeks, months and years. It's up to you.
TimeSpan d=DateTime.Now-someDate;
如果(d.TotalSeconds<59)
{
返回d.TotalSeconds+“秒前”;
}
否则,如果(d.总分钟<59)
{
返回d.TotalMinutes+“分钟前”;
} 
否则如果(d.总小时数<23)
{
返回d.TotalHours+“小时前”;
}
//天、周、月、年。这取决于你。

我觉得我在解决你的家庭作业,但在这里:下面是一个扩展方法的示例,该扩展方法采用DateTime对象,将其与DateTime.Now进行比较,并返回日期的适当描述

public static class Ext
{
    public static string HowMuchAgo(this DateTime dt)
    {
        var difference = (DateTime.Now - dt);
        if (difference < TimeSpan.FromSeconds(.5))
        {
            return "Just now!";
        }
        else if (difference < TimeSpan.FromMinutes(1))
        {
            return difference.Seconds + " seconds ago.";
        }
        else if (difference < TimeSpan.FromHours(1))
        {
            return difference.Minutes + " minutes and " + difference.Seconds + " seconds ago.";
        }
        else if (difference < TimeSpan.FromDays(1))
        {
            return difference.Hours + " hours and " + difference.Minutes + " minutes and " + difference.Seconds + " seconds ago.";
        }
        else if (difference > TimeSpan.FromDays(1) && difference < TimeSpan.FromDays(2))
        {
            return "Yesterday at " + dt.ToShortTimeString();
        }
        else
        {
            return "On " + dt.ToString();
        }
    }
}
公共静态类Ext
{
公共静态字符串HowMuchAgo(此日期时间dt)
{
var差=(DateTime.Now-dt);
如果(差<时间跨度与秒(.5))
{
返回“刚才!”;
}
否则如果(差值<时间跨度,从分钟(1))
{
返回差值。秒+秒前。“;
}
否则如果(差值<时间跨度,从小时(1))
{
返回差分。分钟+“分钟”和“+差分。秒+”秒前。“;
}
否则如果(差值<时间跨度,从第(1)天算起)
{
返回差分。小时+“小时和”+差分。分钟+“分钟和”+差分。秒+“秒前。”;
}
否则如果(差异>时间跨度自天(1)和差异<时间跨度自天(2))
{
返回“昨天在”+dt.ToShortTimeString();
}
其他的
{
返回“On”+dt.ToString();
}
}
}

如果你调用DateTime.Now.HowMuchAgo()你会得到“刚才!”。当然,您可以对此进行修改,以添加更多的if语句,从而在描述中获得更高的粒度,或者修改描述中所述的内容。

请显示一些代码。。。你试过什么?什么不起作用?它是复制品!不需要回答…我本来打算写同样的东西,但意识到这不是OP真正想要的,他们仍然很有帮助,可以提供有关结构的信息。但是人们不投票,因为你不能仅仅粘贴一个链接,如果不解释原因,这并不总是有帮助的。此外,你可以使用减号(-)操作符。您不必使用减法(上面写得不正确)。
public static class Ext
{
    public static string HowMuchAgo(this DateTime dt)
    {
        var difference = (DateTime.Now - dt);
        if (difference < TimeSpan.FromSeconds(.5))
        {
            return "Just now!";
        }
        else if (difference < TimeSpan.FromMinutes(1))
        {
            return difference.Seconds + " seconds ago.";
        }
        else if (difference < TimeSpan.FromHours(1))
        {
            return difference.Minutes + " minutes and " + difference.Seconds + " seconds ago.";
        }
        else if (difference < TimeSpan.FromDays(1))
        {
            return difference.Hours + " hours and " + difference.Minutes + " minutes and " + difference.Seconds + " seconds ago.";
        }
        else if (difference > TimeSpan.FromDays(1) && difference < TimeSpan.FromDays(2))
        {
            return "Yesterday at " + dt.ToShortTimeString();
        }
        else
        {
            return "On " + dt.ToString();
        }
    }
}