常用的各种时间和时间戳的转换
import UIKit
extension Date {
/// 获取当前 秒级 时间戳 - 10位
static public var timeStamp : String {
let timeInterval: TimeInterval = Date().timeIntervalSince1970
let timeStamp = Int(timeInterval)
return "\(timeStamp)"
}
/// 获取当前 毫秒级 时间戳 - 13位
static public var milliStamp : String {
let timeInterval: TimeInterval = Date().timeIntervalSince1970
let millisecond = CLongLong(round(timeInterval*1000))
return "\(millisecond)"
}
//时间戳转成字符串 10位
static public func formatTimeStamp(time:Int ,format:String = "yyyy-MM-DD HH:MM:SS") -> String {
let timeInterval = TimeInterval(time)
let date = Date.init(timeIntervalSince1970: timeInterval)
let dateFormatte = DateFormatter()
dateFormatte.dateFormat = format
return dateFormatte.string(from: date)
}
//时间戳转成字符串 13位
static public func formatTimeMillinStamp(time:Int ,format:String = "yyyy-MM-dd HH:mm") -> String {
let timeInterval = TimeInterval(time / 1000)
let date = Date.init(timeIntervalSince1970: timeInterval)
let dateFormatte = DateFormatter()
dateFormatte.dateFormat = format
return dateFormatte.string(from: date)
}
/// 获取相隔年份的date时间
static public func getDateWithYear(date: Date = Date.init(), distanceYear: Int) -> Date{
let calendar = Calendar.init(identifier: .gregorian)
var comps = DateComponents.init()
comps.year = distanceYear
comps.month = 0
comps.day = 0
let disDate = calendar.date(byAdding: comps, to: date)
return disDate ?? Date.init()
}
//毫秒转时长
static public func secondsToHoursMinutesSeconds (seconds : Int64) -> (String) {
let hours = seconds / 1000 / 3600
let minuter = seconds / 1000 % 3600 / 60
let seconds = (seconds / 1000 % 3600) % 60
var string = ""
var minuterstring = ""
var secondsSting = ""
if minuter < 10{
minuterstring = "0\(minuter)"
}else{
minuterstring = "\(minuter)"
}
if seconds < 10{
secondsSting = "0\(seconds)"
}else{
secondsSting = "\(seconds)"
}
if hours != 0 {
string = "\(hours):\(minuterstring):\(secondsSting)"
}else{
string = "\(minuterstring):\(secondsSting)"
}
return string
}
///获取时间格式化的字符串
static public func getDateString(date: Date = Date.init(), format: String = "yyyy-MM-dd HH:mm" ) -> String{
let dateFormatter = DateFormatter.init()
dateFormatter.dateFormat = format
return dateFormatter.string(from: date)
}
///比较两个时间字符串
/// - Parameters:
static public func compareDateStr(starStr: String, stopStr: String, dateFormat: String = "yyyy-MM-dd") -> Bool {
let formatter = DateFormatter()
formatter.dateFormat = dateFormat
let tempStart = formatter.date(from: starStr)
let tempStop = formatter.date(from: stopStr)
if tempStart == nil || tempStop == nil {
return false
}
let intervalStart = tempStart!.timeIntervalSince1970
let intervalStop = tempStop!.timeIntervalSince1970
return intervalStart < intervalStop
}
//时间排序
static public func compareDateString(dateString: String, otherDateString: String) -> ComparisonResult {
let format = DateFormatter.init()
format.dateFormat = "yyyy-MM-dd"
let date1 = format.date(from: dateString)
let date2 = format.date(from: otherDateString)
if date1 != nil && date1 != nil {
return date1!.compare(date2!)
}
return .orderedAscending
}
//字符串转时间戳
static public func timeStrChangeTotimeInterval(timeStr: String?, dateFormat:String? = nil) -> String {
if timeStr == nil {
return ""
}
let format = DateFormatter.init()
format.dateStyle = .medium
format.timeStyle = .short
format.locale = Locale.init(identifier: "zh_Hans_CN")
if dateFormat == nil {
format.dateFormat = "yyyy-MM-dd HH:mm:ss"
}else{
format.dateFormat = dateFormat
}
guard let date = format.date(from: timeStr!) else {
return ""
}
return String(CLongLong(round(date.timeIntervalSince1970*1000)))
}
}