【问题标题】:C# - Changing Date and Time FormatC# - 更改日期和时间格式
【发布时间】:2015-01-03 01:43:16
【问题描述】:

我正在尝试根据日期和时间格式创建原生消息传递应用程序所具有的内容,具体取决于经过的天数。

假设我创建了一条消息并在今天 2015 年 3 月 1 日星期六下午 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 AM, Monday。 p>

为此,我目前正在使用此功能:

  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 月 1 日,我在下午 12:20 左右查看格式。格式仍为下午 2:35。 (在 h:mm tt 中)并且不会改变。唯一一次改变格式是在下午 2:35 之后。于 2015 年 4 月 1 日。我希望在第二天更改格式,而不需要等到今天的时间或日期与昨天的时间或日期匹配才能更改。如前所述,我试图让它像原生消息应用程序一样工作。

【问题讨论】:

    标签: c# datetime windows-phone-8 format


    【解决方案1】:

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

    替换:

    if (totalSpan.TotalHours < 24)
    

    有了这个:

    if (time.Date == timeNow.Date)
    

    这样,短时间字符串只会在日期没有改变的情况下出现。一旦你过了午夜,它就会进入下一个条件。

    【讨论】:

    • 那行不通。同样的问题。我必须等到日期/时间过去,直到格式改变。任何想法为什么?
    • 您确定您没有遇到一些奇怪的时区问题吗?我同意马特提供的答案。
    • @MarcinJuraszek 我怎么知道我是否遇到了奇怪的时区问题?
    • 所有事情都发生在同一个时区吗?您是否将您的 DateTime 实例标准化为 UTC?在编程中处理时间并不是一件容易的事,需要考虑的事情很多。
    • @MarcinJuraszek 一切都发生在同一个时区。上面的代码是我在更改时间格式方面唯一的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2013-06-29
    • 2017-05-13
    • 2015-08-04
    相关资源
    最近更新 更多