如何将日期转换为字符串格式。? [复制]
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 将序号转换为日期格式? [复制]