使用NSDateIntervalFormatterStyle更漂亮的输出

时间:2015-03-23 09:31:10

标签: ios nsdate nsdateformatter

使用 NSDateIntervalFormatterStyle 我可以输出如下日期范围:

  • 6/30/14 - 7/11/14 for shortstyle
  • 2014年6月30日 - 2014年7月11日中级
  • 2014年6月30日 - 2014年7月11日for longstyle

是否有更好的方法(除手动处理此输出外)输出漂亮的日期范围,如:

  • 6/30 - 7/11 for shortstyle
  • Jun 30 - Jul 11​​ for mediumstyle(甚至是Jun 3-12)?

使用如此长的 mediumstyle 会占用很多屏幕。

2 个答案:

答案 0 :(得分:1)

尝试为dateTemplate类的实例设置NSDateIntervalFormatter属性,例如如下:

let formatter = NSDateIntervalFormatter()
formatter.dateTemplate = "dd/MM"
print(formatter.stringFromDate(date1, toDate: date2))

这将从日期间隔生成一个字符串,如下所示:5/1 - 5/7

答案 1 :(得分:0)

(目前)NSDateIntervalFormatter不支持自定义日期格式。但是如果您的日期差异很小(即没有时间,总是在不同的日期,年份无关紧要),您可以轻松创建自己的子类。

e.g:

class DateIntervalFormatter: NSObject {
    lazy var dateFormatter: NSDateFormatter = {
        let df = NSDateFormatter()
        df.dateFormat = NSDateFormatter.dateFormatFromTemplate("MMM dd", options: 0, locale: nil)
        return df
    }()
    func stringFromDate(fromDate: NSDate, toDate: NSDate) -> String {
        let fromStr = dateFormatter.stringFromDate(fromDate)
        let toStr = dateFormatter.stringFromDate(toDate)
        return "\(fromStr) – \(toStr)"
    }
}

使用此测试代码生成Jun 30 – Jul 11

let date1 = NSCalendar.currentCalendar().dateWithEra(1, year: 2015, month: 6, day: 30, hour: 0, minute: 0, second: 0, nanosecond: 0)!
let date2 = NSCalendar.currentCalendar().dateWithEra(1, year: 2015, month: 7, day: 11, hour: 0, minute: 0, second: 0, nanosecond: 0)!

let customFormatter = DateIntervalFormatter()
let string = customFormatter.stringFromDate(date1, toDate: date2)