我正在尝试使用Swift将UTC格式的日期从API转换为人类可读的近似格式。
我正在寻找类似以下内容的内容:
2015年7月14日13时51分423秒
至
大约两周前
Swift中最好的方法是什么?虽然最好的方法是直接格式化字符串,但我知道这可能需要将字符串转换为NSDate对象。
任何帮助都将不胜感激。
编辑:我的问题被认为是another question的一个可能的重复。下面Tom的解决方案是为Swift编写的,比根据我的情况创建一个新方法要优雅得多。
我正在尝试使用Swift将UTC格式的日期从API转换为人类可读的近似格式。
我正在寻找类似以下内容的内容:
2015年7月14日13时51分423秒
至
大约两周前
Swift中最好的方法是什么?虽然最好的方法是直接格式化字符串,但我知道这可能需要将字符串转换为NSDate对象。
任何帮助都将不胜感激。
编辑:我的问题被认为是another question的一个可能的重复。下面Tom的解决方案是为Swift编写的,比根据我的情况创建一个新方法要优雅得多。
3条答案
按热度按时间fkvaft9z1#
您需要两个步骤。首先,将日期字符串转换为
NSDate
:(If这不是您所得到的字符串的精确表示形式,您必须更改日期格式字符串以使其能够转换)。
接下来,使用
NSDateComponentsFormatter
获取所需的字符串:今天是7月28日,所以该字符串的结果是“About 2 weeks”。
allowedUnits
属性是一个位字段,因此您可以指定任意多个单位类型。bmvo0sr52#
正如汤姆·哈林顿(Tom Harrington)在回答时所指出的,你可以用
NSDateComponentsFormatter
来产生一个时刻或时间间隔的口语化表示。然而,如果你想做的正是这个问题在它的例子中所要求的,也就是产生一个 * 过去时刻相对于现在时刻的口语化表示 *,就像一个面向时间轴的UI一样,那么
NSDateComponentsFormatter
似乎并不适合。时间间隔值““必须是有限的数字。在创建字符串时,负数被视为正数。据我所知,最好的选择是
TTTTimeIntervalFormatter
,它是Mattt Thompson的FormatterKit中的一个独立类。我制作了一个Xcode 7游戏场RelativeDatePlayground,它比较了
NSDateFormatter
输出和TTTTimeIntervalFormatter
的输出。下面的表格显示了不同相对时间(以秒为单位)的输出。正如你所看到的,NSDateComponentsFormatter
似乎不能很好地处理过去的时刻或现在的时刻:mwngjboj3#
从iOS 13 / macOS 10.15开始,你就可以使用
RelativeDateTimeFormatter
了。感谢@mattt把这个放在你的archived Github README上。