如何将日期转换为字符串格式。? [复制]

Posted

技术标签:

【中文标题】如何将日期转换为字符串格式。? [复制]【英文标题】:How I can convert Date to String formate.? [duplicate] 【发布时间】:2012-01-31 20:10:50 【问题描述】:

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

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

谢谢你..!!

【问题讨论】:

请显示一些代码...您尝试了什么?什么不工作? 它是重复的!不需要回答... 【参考方案1】:

从这里开始; http://msdn.microsoft.com/en-us/library/system.datetime.aspx

http://social.msdn.microsoft.com/search/en-us?query=TimeSpan&x=0&y=0

我相信您要做的是使用 TimeSpan 来确定现在与发布某些内容的日期之间的差异。您将不得不对结果做一些工作,但您可以计算出不同的小时/分钟/天/年。

【讨论】:

【参考方案2】:

check this out: Custom Date and Time Format Strings

【讨论】:

我本来打算写同样的东西,但意识到这不是 OP 真正想要的,它们仍然很有帮助,并且可以提供有关结构的信息。但是人们投了反对票,因为你不能只是粘贴一个链接,如果不解释原因,它并不总是那么有用。【参考方案3】:
DateTime now = DateTime.Now;

DateTime older = //orignal date time;

TimeSpan difference = now.Subtract(older);

获得时间跨度后,您可以使用时间跨度类公开的属性计算年、月、日等

【讨论】:

另外,您可以使用减号 (-) 运算符。您不必使用 Subtract(上面的写法不正确)。【参考方案4】:

我认为您正在寻找类似 timeago algorithim 的东西。

你可以这样使用:

    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";
    

在***上有一个类似的问题,你一定要看:

Calculate relative time in C#

更多详情见:

http://www.daniweb.com/software-development/csharp/threads/127213

希望这会有所帮助。

【讨论】:

【参考方案5】:

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

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";

有关更完整/详细的功能,请参阅另一个问题。 (Calculate relative time in C#)

【讨论】:

【参考方案6】:

您需要从当前日期中减去日期。这将为您提供一个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.

【讨论】:

【参考方案7】:

我觉得我正在解决你的作业,但在这里:以下是一个扩展方法的示例,它采用 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();
        
    

如果你调用 DateTime.Now.HowMuchAgo​​() 你会得到“Just now!”。当然,您可以修改它以添加更多 if 语句以在描述中获得更多粒度或修改描述中的内容。

【讨论】:

以上是关于如何将日期转换为字符串格式。? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将字符串日期转换为日期时间格式? [复制]

如何将 JavaScript 日期转换为 MySQL 日期时间格式? [复制]

如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]

如何使用 SQL/Python 将序号转换为日期格式? [复制]

如何将 HTML5 输入日期转换为我喜欢的某种格式? [复制]

如何将日期类转换为正确解析日期时间? [复制]