【问题标题】:How to format in NSDate depending on the time difference?如何根据时差在 NSDate 中格式化?
【发布时间】:2013-07-16 09:07:56
【问题描述】:

我想用以下方式显示日期:

  • 如果是今天,则只显示时间。
  • 如果是过去一周,则显示“昨天”、“星期天”、“星期一”等。
  • 如果超过一周,则显示实际日期。

我正在尝试获得类似于 iPhone SMS 应用程序中显示日期的方法。

【问题讨论】:

  • 你有没有尝试实现一些东西?听起来很轻松。比较日期和今天。如果是今天使用今天,如果不到一周前使用工作日,否则使用确切日期。
  • @MatthiasBauch 谢谢你的回复。我还没试过。因为我是 iPhone 开发的新手
  • Google 在发布问题之前。你应该已经找到答案了。

标签: ios objective-c nsdate nsdateformatter nsdatecomponents


【解决方案1】:

为什么不用

的方法
setDoesRelativeDateFormatting:

设置为YES。现在格式化程序将根据应格式化的日期返回“今天”或“昨天”或“明天”。如果找不到相对格式,则使用格式化程序进行格式化。

【讨论】:

    【解决方案2】:

    更多格式模式如下:

    • OS X v10.8 和 iOS 6.0 中的格式化程序使用版本 tr35-25
    • iOS 5.0-5.1 中的格式化程序使用版本tr35-19
    • OS X v10.7 和 iOS 4.3 中的格式化程序使用版本 tr35-17
    • iOS 4.0-4.2 中的格式化程序使用版本tr35-15
    • iOS 3.2 中的格式化程序使用版本tr35-12
    • OS X v10.6 和 iOS 3.0-3.1 中的格式化程序使用版本 tr35-10

    【讨论】:

      【解决方案3】:

      在询问您从未尝试过的事情之前,请先阅读 NSDateFormatter(link here) 和 NSDate (link here) 课程文档。

      NSDateFormatter 类可用于将日期正确格式化为您选择的日期,并为日期的不同组成部分提供固定参数。要显示当天的全名,请在格式中使用“cccc”。例如

      NSDateFormatter *df = [[NSDateFormatter alloc] init];
      [df setFormat:@"cccc dd-MM, HH:mm:ss"];
      

      为了比较日期,有一些内置方法可以比较 NSDate 对象,例如 isEqualToDatelaterDate:timeIntervalSinceNow 等。请阅读 Apple 文档 link

      【讨论】:

      • 由于cccc 用于独立的工作日,我建议改用EEEE。只有在单独使用时才应该使用独立版本(例如在日历标题中)。在俄罗斯、芬兰或意大利语言环境中,这两者之间存在差异。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      相关资源
      最近更新 更多