我尝试创建原生消息应用程序在日期和时间格式方面的变化,具体取决于过去的天数。
让我们说我今天创建了一条消息并发送了 03/01/2015,星期六下午2:21 。其格式应为:
.ToString("h:mm tt"); //2:21 p.m.
这表明该消息是在今天下午2:21发送的,格式在周日(明天)之前不会改变。
此DateTime格式将保持这样直到明天 04/01/2015,12:00 AM,Sunday 。现在的格式应为:
.ToString("ddd"); //Sat
现在这表明该消息是在星期六昨天发送的,当前格式将不会改变,直到星期一 05/01/2015,星期一中午12:00
要做到这一点,我目前正在使用此功能:
public static string GetVisibleTime(DateTime time)
{
DateTime timeNow = DateTime.Now;
TimeSpan totalSpan = (timeNow - time);
if (totalSpan.TotalHours < 24)
{
return time.ToShortTimeString();
}
if (totalSpan.TotalDays < 7)
{
return time.ToString("ddd");
}
if (totalSpan.TotalDays < 14)
{
return time.ToString("ddd/MMM");
}
if (totalSpan.TotalDays < 365 && time.Year == timeNow.Year)
{
return time.ToString("MM/yy");
}
return time.ToString("dd/MM/yy");
}
现在让我们说我今天在下午2:35创建并发送了我的信息。 2015年3月1日和明天将于2015年4月4日,我检查下午12:20左右格式是什么。格式仍将是下午2:35。 (在h:mm tt)并且不会改变。格式改变的唯一时间是在下午2:35过后。在2015年4月1日。我希望格式在第二天更改,而不需要等到今天的时间或日期与昨天的时间或日期相匹配才能更改。就像之前提到的那样,我试图让它像本机消息传递应用程序一样工作。
答案 0 :(得分:1)
听起来您想要改变正在评估的条件。而不是检查经过的时间,检查相同的日期。
替换:
if (totalSpan.TotalHours < 24)
有了这个:
if (time.Date == timeNow.Date)
这样,短时间字符串仅在日期未更改时才会出现。一旦你通过午夜,它将进入下一个条件。