NSDate를 쉽게 다루기
예)
let date = "2016-09-02 12:00:00".toDate("yyyy-MM-dd HH:mm:ss")
date.toLocalTimeString() // -> "2016-09-02 12:00:00.000"
date.toString(.FullStyle, timeStyle: .FullStyle) // -> "2016년 9월 2일 금요일 오후 12시 0분 0초 대한민국 표준시"
date.toRelativeString() // -> "6 hours ago"
소스:
extension String {
func localized(comment: String = "", tableName: String? = nil) -> String {
if let value = NSLocalizedString(self, tableName: tableName, bundle: NSBundle.mainBundle(), value: "", comment: comment) as String? {
return value
}
return self
}
func toDate(format: String = "EEE, dd MMM yyyy HH:mm:ss ZZZ") -> NSDate! {
let formatter = NSDateFormatter()
formatter.dateFormat = format
guard let date = formatter.dateFromString(self) else {
return nil
}
return date
}
}
extension NSDate {
func toLocalTimeString(format: String = "yyyy-MM-dd HH:mm:ss.SSS") -> String {
let formatter = NSDateFormatter()
formatter.timeZone = NSTimeZone.localTimeZone()
formatter.dateFormat = format
return formatter.stringFromDate(self)
}
func toString(dateStyle: NSDateFormatterStyle, timeStyle: NSDateFormatterStyle) -> String {
let formatter = NSDateFormatter()
formatter.timeZone = NSTimeZone.localTimeZone()
formatter.dateStyle = dateStyle
formatter.timeStyle = timeStyle
return formatter.stringFromDate(self)
}
func toRelativeString(format: String = "yyyy-MM-dd HH:mm:ss") -> String {
let s = Int(-self.timeIntervalSinceNow)
switch (s) {
case 0...20:
return "Now".localized()
case 21...59:
return "1 minute ago".localized()
case 60...3599:
return NSString(format: "%d minutes ago".localized(), s / 60) as String
case 3600...7199:
return "1 hour ago".localized()
case 7200...86399:
return NSString(format: "%d hours ago".localized(), s / 3600) as String
default:
let formatter = NSDateFormatter()
formatter.timeZone = NSTimeZone.localTimeZone()
formatter.dateFormat = format
return formatter.stringFromDate(self)
}
}
}
유승훈 7년전 질문