您建議:
- 更改數據庫中的飼料,我覺得這是更好的選擇的時候。
不,在數據庫中的日期,以及作爲其被傳與Web服務,不應該是一個格式化字符串。數據庫和Web服務應該捕獲原始日期(或者更精確地說,RFC3339/ISO8601格式或某個參考日期的秒數)。用戶界面字符串中已用時間的格式是應用程序的責任。
- 檢索帖子的時間,如果條件反覆遍歷MULTIPLE並相應地設置帖子的時間。
是的,這就是你應該做的。
順便說一句,如果你要省略年份,你可能有第四個排列,其中包括今年如果日期是在過去的一年多,比如:
func formattedPostDateString(date: NSDate) -> String {
let now = NSDate()
let elapsed = NSCalendar.currentCalendar().components([.Day, .Year], fromDate: date, toDate: now, options: [])
switch (elapsed.year, elapsed.day) {
case (0, 0):
return "\(elapsedFormatter.stringFromDate(date, toDate: now)!) \(agoDateString)"
case (0, 1):
return yesterdayString
case (0, _):
return "\(onDateString) \(lessThanOneYearFormatter.stringFromDate(date))"
default:
return "\(onDateString) \(moreThanOneYearFormatter.stringFromDate(date))"
}
}
凡
let onDateString = NSLocalizedString("On", comment: "prefix used in 'On 5 Aug'")
let agoDateString = NSLocalizedString("ago", comment: "suffix use in '4 hours ago'")
let yesterdayString = NSLocalizedString("Yesterday", comment: "showing 'date' where it's between 24 and 48 hours ago")
let elapsedFormatter: NSDateComponentsFormatter = {
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Year, .Month, .Day, .Hour, .Minute, .Second]
formatter.unitsStyle = .Full
formatter.maximumUnitCount = 1
return formatter
}()
let lessThanOneYearFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("MMM d", options: 0, locale: nil)
return formatter
}()
let moreThanOneYearFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.dateStyle = .MediumStyle
return formatter
}()
您唯一需要做的就是將Web服務返回的字符串轉換爲NSDate
對象。爲此,Web服務可能應該以ISO 8601/RFC 3339格式(例如2016-08-26T15:01:23Z
格式)返回發佈日期。
要斯威夫特2創建ISO8601/RFC3339日期:
let isoDateFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
return formatter
}()
然後:
let string = isoDateFormatter.stringFromDate(date)
或者
let date = isoDateFormatter.dateFromString(string)
或者在iOS中使用10+ 3斯威夫特,你可以使用新的ISO8601DateFormatter
:
let isoDateFormatter = ISO8601DateFormatter()
感謝您的詳細回覆:) @Rob – Dravidian