扩展是给已经存在的类(class),结构体(structure),枚举类型(enumeration)和协议(protocol)增加新的功能。类似Objective-C中的Category,不同的是,Extension没有名字。扩展可以做以下事情:
/**
刚刚(一分钟内)
X分钟前(一小时内)
X小时前(当天)
昨天HH:mm(昨天)
MM-dd HH:mm(一年内)
yyyy-MM-dd HH:mm(更早期)
*/
import Foundation
import UIKit
extension Date
{
static func dateWithStr(_ time: String) ->Date {
// 1.将服务器返回给我们的时间字符串转换为NSDate
// 1.1.创建formatter
let formatter = DateFormatter()
// 1.2.设置时间的格式
formatter.dateFormat = "EEE MMM d HH:mm:ss Z yyyy"
// 1.3设置时间的区域(真机必须设置,否则可能不能转换成功)
formatter.locale = Locale(identifier: "en")
// 1.4转换字符串,转换好的时间是去除时区的时间
let createdDate = formatter.date(from: time)!
return createdDate
}
var descDate:String{
let calendar = Calendar.current
// 1.判断是否是今天
if calendar.isDateInToday(self)
{
// 1.0获取当前时间和系统时间之间的差距(秒数)
let since = Int(Date().timeIntervalSince(self))
print("since = \(since)")
@H_131_403@// 1.1是否是刚刚
if since < 60
{
return "刚刚"
}
// 1.2多少分钟以前
if since < 60 * 60
{
return "\(since/60)分钟前"
}
// 1.3多少小时以前
return "\(since / (60 * 60))小时前"
}
// 2.判断是否是昨天
var formatterStr = "HH:mm"
if calendar.isDateInYesterday(self)
{
// 昨天: HH:mm
formatterStr = "昨天:" + formatterStr
}else
{
@H_131_403@// 3.处理一年以内
formatterStr = "MM-dd " + formatterStr
@H_131_403@// 4.处理更早时间
let comps = (calendar as NSCalendar).components(NSCalendar.Unit.year,from: self,to: Date(),options: Options(rawValue: 0))
if comps.year! >= 1
{
formatterStr = "yyyy-" + formatterStr
}
}
// 5.按照指定的格式将时间转换为字符串
// 5.1.创建formatter
let formatter = // 5.2.设置时间的格式
formatter.dateFormat = formatterStr
// 5.3设置时间的区域(真机必须设置,170)">Locale(identifier: "en")
// 5.4格式化
return formatter.string(from: self)
}
}