从内存、易读性、易用性三个方面持续优化,感觉臻至完美,好长一段时间没有新的优化灵感了,遂分享给大家。有更好的请留言,我喜欢把一些事情做到极致。
/*
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K:时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
*/
import UIKit
/// 60s
public let kDate_minute : Double = 60 ;
/// 3600s
public let kDate_hour : Double = 3600 ;
/// 86400
public let kDate_day : Double = 86400 ;
/// 604800
public let kDate_week : Double = 604800 ;
/// 31556926
public let kDate_year : Double = 31556926 ;
/// yyyy-MM-dd HH:mm:ss(默认)
public let kDateFormat = "yyyy-MM-dd HH:mm:ss";
/// yyyy-MM
public let kDateFormat_month = "yyyy-MM";
/// yyyy-MM-dd
public let kDateFormat_day = "yyyy-MM-dd";
/// yyyy-MM-dd HH
public let kDateFormat_hour = "yyyy-MM-dd HH";
/// yyyy-MM-dd HH:mm
public let kDateFormat_minute = "yyyy-MM-dd HH:mm";
/// yyyy-MM-dd HH:mm:ss eee
public let kDateFormat_millisecond = "yyyy-MM-dd HH:mm:ss eee";
/// yyyy-MM-dd 00:00:00
public let kDateFormat_start = "yyyy-MM-dd 00:00:00";
/// yyyy-MM-dd 23:59:59
public let kDateFormat_end = "yyyy-MM-dd 23:59:59";
/// yyyy年M月
public let kDateFormat_month_ch = "yyyy年MM月";
/// yyyy年MM月dd日
public let kDateFormat_day_ch = "yyyy年MM月dd日";
/// yyyyMMdd
public let kDateFormat_two = "yyyyMMdd";
@objc public extension DateFormatter{
/// 获取DateFormatter(默认格式)
static func format(_ formatStr: String = kDateFormat) -> DateFormatter {
let dic = Thread.current.threadDictionary;
if dic.object(forKey: formatStr) != nil {
return dic.object(forKey: formatStr) as! DateFormatter;
}
let fmt = DateFormatter();
fmt.dateFormat = formatStr;
fmt.locale = .current;
fmt.locale = Locale(identifier: "zh_CN");
fmt.timeZone = NSTimeZone.local;
dic.setObject(fmt, forKey: formatStr as NSCopying)
return fmt;
}
/// Date -> String
static func stringFromDate(_ date: Date, fmt: String = kDateFormat) -> String {
let formatter = DateFormatter.format(fmt);
return formatter.string(from: date);
}
/// String -> Date
static func dateFromString(_ dateStr: String, fmt: String = kDateFormat) -> Date? {
let formatter = DateFormatter.format(fmt);
let tmp = dateStr.count > fmt.count ? (dateStr as NSString).substring(to: fmt.count) : dateStr
let result = formatter.date(from: tmp);
return result
}
/// 时间戳字符串 -> 日期字符串
static func stringFromInterval(_ interval: String, fmt: String = kDateFormat) -> String {
let date = Date(timeIntervalSince1970: interval.doubleValue)
return DateFormatter.stringFromDate(date, fmt: fmt);
}
/// 日期字符串 -> 时间戳字符串
static func intervalFromDateStr(_ dateStr: String, fmt: String = kDateFormat) -> String {
guard let date = DateFormatter.dateFromString(dateStr, fmt: fmt) else {
return "0" }
return "\(date.timeIntervalSince1970)";
}
网友评论