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();
}
}
}