C# - 更改日期和时间格式

C# - Changing Date and Time Format

我正在尝试创建本机消息传递应用程序所具有的日期和时间格式,具体取决于已经过去了多少天。

假设我创建了一条消息并于今天 03/01/2015 周六 2:21 下午 发送。格式应该是:

.ToString("h:mm tt"); //2:21 p.m.

这表示消息是今天在 2:21 p.m 发送的,格式直到星期天(明天)才会改变。

此 DateTime 格式将一直保持到明天,即 04/01/2015,12:00 上午,星期日 。现在格式应该是:

.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 p.m 创建并发送了消息。在 03/01/2015 和明天 04/01/2015,我在 12:20 p.m 左右查看格式。格式仍为 2:35 p.m。 (在 h:mm tt)并且不会改变。格式唯一会改变的时间是在它通过 2:35 p.m 之后。 2015 年 4 月 1 日。我希望格式在第二天更改,而不需要等到今天的时间或日期与昨天的时间或日期匹配才能更改。如前所述,我正在尝试让它像本机消息传递应用程序一样工作。

听起来您想更改正在评估的条件。不要检查经过的时间,而是检查相同的日期。

替换:

if (totalSpan.TotalHours < 24)

有了这个:

if (time.Date == timeNow.Date)

这样,短时间字符串只会在日期未更改时出现。一旦过了午夜,就会进入下一个条件。