ObjectMapper内置的时间转换模式有限,有时候从服务端获取的时间数据不能正常转换,这种时候就需要通过自定义时间转换模式来解决。
第1步:实现协议TransformType
//
// HxDateTransform.swift
// App
//
// Created by kila on 17/02/2018.
// Copyright © 2018 kila. All rights reserved.
//
import UIKit
import ObjectMapper
// 自定义ObjectMapper的时间转换(实现协议TransformType)
class ObjectMapperDateTransform: TransformType {
public typealias Object = Date
public typealias JSON = String
public init() {}
open func transformFromJSON(_ value: Any?) -> Date? {
if let timeStr = value as? String {
return DateUtil.str2Date(str: timeStr, format: DateUtil.DATEFORMAT.FORMAT_YMDHMS.rawValue)
}
return nil
}
open func transformToJSON(_ value: Date?) -> String? {
if let date = value {
return DateUtil.date2Str(date: date, format: DateUtil.DATEFORMAT.FORMAT_YMDHMS.rawValue)
}
return nil
}
}
第2步:映射时添加ObjectMapperDateTransform()
//
// Blog.swift
// App
//
// Created by kila on 14/02/2018.
// Copyright © 2018 kila. All rights reserved.
//
import UIKit
import ObjectMapper
class Blog: Mappable {
var id: String?
var userID: String?
var content: String?
var imgs: String?
var checkNum: Int64?
var likeNum: Int64?
var commentNum: Int64?
var createdAt: Date?
// kz
var user: User?
required init?(map: Map) {
}
func mapping(map: Map) {
self.id <- map["id"]
self.userID <- map["userID"]
self.content <- map["content"]
self.imgs <- map["imgs"]
self.checkNum <- map["checkNum"]
self.likeNum <- map["likeNum"]
self.commentNum <- map["commentNum"]
self.createdAt <- (map["createdAt"], ObjectMapperDateTransform())
}
}
//
// DateUtil.swift
// App
//
// Created by kila on 17/02/2018.
// Copyright © 2018 kila. All rights reserved.
//
import UIKit
// 日期格式化工具类
class DateUtil: NSObject {
enum DATEFORMAT: String {
/**
* 英文简写如:2010
*/
case FORMAT_Y = "yyyy"
/**
* 英文简写如:12:01
*/
case FORMAT_HM = "HH:mm"
/**
* 英文简写如:1-12 12:01
*/
case FORMAT_MDHM = "MM-dd HH:mm"
/**
* 英文简写(默认)如:2010-12-01
*/
case FORMAT_YMD = "yyyy-MM-dd"
/**
* 英文全称 如:2010-12-01 23:15
*/
case FORMAT_YMDHM = "yyyy-MM-dd HH:mm"
/**
* 英文全称 如:2010/12/01 23:15
*/
case FORMAT_YMDHM_1 = "yyyy/MM/dd HH:mm"
/**
* 英文全称 如:2010-12-01 23:15:06
*/
case FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss"
/**
* 精确到毫秒的完整时间 如:yyyy-MM-dd HH:mm:ss.S
*/
case FORMAT_FULL = "yyyy-MM-dd HH:mm:ss.S"
/**
* 精确到毫秒的完整时间 如:yyyy-MM-dd HH:mm:ss.S
*/
case FORMAT_FULL_SN = "yyyyMMddHHmmssS"
/**
* 中文简写 如:2010年12月01日
*/
case FORMAT_YMD_CN = "yyyy年MM月dd日"
/**
* 中文简写 如:2010年12月01日 12时
*/
case FORMAT_YMDH_CN = "yyyy年MM月dd日 HH时"
/**
* 中文简写 如:2010年12月01日 12时12分
*/
case FORMAT_YMDHM_CN = "yyyy年MM月dd日 HH时mm分"
/**
* 2010年12月01日 12:12
*/
case FORMAT_YMDHM_CN_EN = "yyyy年MM月dd日 HH:mm"
/**
* 中文全称 如:2010年12月01日 23时15分06秒
*/
case FORMAT_YMDHMS_CN = "yyyy年MM月dd日 HH时mm分ss秒"
/**
* 精确到毫秒的完整中文时间
*/
case FORMAT_FULL_CN = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒"
}
static func str2Date(str: String, format: String) -> Date {
var format_: String?
if (format.isEmpty) {
format_ = DATEFORMAT.FORMAT_YMDHMS.rawValue
}
else{
format_ = format
}
let formatter = DateFormatter()
formatter.dateFormat = format_
let date = formatter.date(from: str)
return date!;
}
static func date2Str(date: Date, format: String) -> String {
var format_: String?
if (format.isEmpty) {
format_ = DATEFORMAT.FORMAT_YMDHMS.rawValue
}
else{
format_ = format
}
let formatter = DateFormatter()
formatter.dateFormat = format_
let str = formatter.string(from: date)
return str
}
// 获取时间描述(以现在的时间为基准)
static func timeBetween(date: Date) -> String {
let now: Date = NSDate() as Date
let gregorian = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)
let result = gregorian!.components(NSCalendar.Unit.second, from: date, to: now, options: NSCalendar.Options(rawValue: 0)) // 获取时间差--秒
let between = result.second!
let year = between / 3600 / 24 / 60
let day = between / 3600 / 24
let hours = between % (24 * 3600) / 3600
let minute = between % 3600 / 60
if (year != 0) {
return date2Str(date: date, format: DATEFORMAT.FORMAT_YMD_CN.rawValue)
} else if (day != 0) {
return String(day) + "天前"
} else if (hours != 0) {
return String(hours) + "小时前"
} else if (minute != 0) {
return String(minute) + "分钟前"
} else {
if (60 >= between) {
return "刚刚"
} else {
return date2Str(date: date, format: DATEFORMAT.FORMAT_YMD_CN.rawValue)
}
}
}
}