Swift中的日期/时间自然语言逼近

Tyl*_*ler 13 datetime cocoa-touch nsdateformatter swift swift2

我试图使用Swift将UTC格式的日期从API转换为人类可读的近似格式.

我正在寻找以下内容:

2015-07-14T13:51:05.423Z

大约两周前

Swift中最好的方法是什么?虽然最好这可以直接格式化字符串,但我知道这可能需要将字符串转换为NSDate对象.

任何帮助将不胜感激.

编辑:我的问题已被确定为另一个问题的可能重复.Tom的解决方案是针对Swift编写的,并且比根据我的情况创建一个新方法更优雅.

Tom*_*ton 31

你需要两个步骤.首先,将您的日期字符串转换为NSDate:

let dateString = "2015-07-14T13:51:05.423Z"

let df = NSDateFormatter()
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = df.dateFromString(dateString)
Run Code Online (Sandbox Code Playgroud)

(如果这不是您获得的字符串的精确表示,则必须更改日期格式字符串以使其转换).

接下来,用于NSDateComponentsFormatter获取所需的字符串:

let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Full
formatter.includesApproximationPhrase = true
formatter.includesTimeRemainingPhrase = false
formatter.allowedUnits = NSCalendarUnit.WeekOfMonthCalendarUnit

if let pastDate = date {
    let dateRelativeString = formatter.stringFromDate(pastDate, toDate: NSDate())
}
Run Code Online (Sandbox Code Playgroud)

今天是7月28日,因此该字符串的结果是"大约2周".该allowedUnits属性是一个位字段,因此您可以指定任意数量的单元类型.

  • 如果你反复使用它(即在表视图单元格中),应该注意的一件事是创建日期格式化程序需要花费一点CPU,因此保留一个日期格式化程序以便重用(例如创建它)会很方便viewDidLoad中). (5认同)