swift Date

Posted ihoudf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift Date相关的知识,希望对你有一定的参考价值。


作者:想聽丿伱說衹愛我
链接:https://www.jianshu.com/p/3170a2e7d16a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、简介

可使用DateFormatter将Date格式化成字符串,经常通过CalendarDateComponents来获取符合某条件的Date。

二、API

  1. 获取1970到2001年的间隔(秒)
public static let timeIntervalBetween1970AndReferenceDate: TimeInterval
print(Date.timeIntervalBetween1970AndReferenceDate)
//978307200.0
  1. 获取2001-1-1 00:00:00到现在的间隔(秒)
public static var timeIntervalSinceReferenceDate: TimeInterval  get 
print(Date.timeIntervalSinceReferenceDate)
//629172967.099814
  1. 初始化方法
  • 当前日期
public init()
print(Date())
//2020-12-09 02:18:16 +0000
  • 当前日期偏移多少秒后的日期
public init(timeIntervalSinceNow: TimeInterval)
print(Date(), Date(timeIntervalSinceNow: 10), separator: "\\n")
//2020-12-09 02:22:05 +0000
//2020-12-09 02:22:15 +0000
  • 1970-01-01 00:00:00偏移多少秒后的日期
public init(timeIntervalSince1970: TimeInterval)
print(Date(timeIntervalSince1970: 10))
//1970-01-01 00:00:10 +0000
  • 日期date偏移多少秒后的日期
public init(timeInterval: TimeInterval, since date: Date)
print(Date(timeInterval: 10, since: Date()), Date(timeIntervalSinceNow: 10), 
                                                            separator: "\\n")
//2020-12-09 02:27:21 +0000
//2020-12-09 02:27:21 +0000
  • 2001-01-01 00:00:00偏移多少秒后的日期
public init(timeIntervalSinceReferenceDate ti: TimeInterval)
print(Date(timeIntervalSinceReferenceDate: 10))
//2001-01-01 00:00:10 +0000
  1. 时间间隔
  • 与2001-01-01 00:00:00的间隔(秒)
public var timeIntervalSinceReferenceDate: TimeInterval  get 
let d = Date()
print(d.timeIntervalSinceReferenceDate)
//629173835.230096
  • 与时间date的间隔(秒)
public func timeIntervalSince(_ date: Date) -> TimeInterval
let d = Date()
print(d.timeIntervalSince(Date(timeIntervalSinceNow: 10)))
//-10.000119924545288
  • 与当前时间的间隔(秒)
public var timeIntervalSinceNow: TimeInterval  get 
let d = Date(timeIntervalSinceNow: 10)
print(d.timeIntervalSinceNow)
//9.999890923500061
  • 与1970-01-01 00:00:00的间隔(秒)
public var timeIntervalSince1970: TimeInterval  get 
let d = Date()
print(d.timeIntervalSince1970)
//1607481591.40725
  1. 返回偏移多少秒后的新日期
public func addingTimeInterval(_ timeInterval: TimeInterval) -> Date

相当于+ -

let d = Date()
print(d, d.addingTimeInterval(10), d+10, separator: "\\n")
//2020-12-09 02:47:55 +0000
//2020-12-09 02:48:05 +0000
//2020-12-09 02:48:05 +0000
  1. 日期偏移多少秒
public mutating func addTimeInterval(_ timeInterval: TimeInterval)

突变方法 相当于+= -=

        var d = Date()
        print(d)
        d.addTimeInterval(10)
        print(d)
        d+=10
        print(d)
//2020-12-09 02:48:35 +0000
//2020-12-09 02:48:45 +0000
//2020-12-09 02:48:55 +0000
  1. 获取一个遥远的将来的日期
public static let distantFuture: Date
print(Date.distantFuture)
//4001-01-01 00:00:00 +0000
  1. 获取一个遥远的过去的日期
public static let distantPast: Date
print(Date.distantPast)
//0001-01-01 00:00:00 +0000

8.比较另一个日期

public func compare(_ other: Date) -> ComparisonResult

enum ComparisonResult : Int 
    case orderedAscending = -1//升序 <
    case orderedSame = 0      //相等 =
    case orderedDescending = 1//降序 >

var d = Date()
print(d.compare(d+10).rawValue)
//-1
  1. 比较符与运算符
//两日期是否相等
public static func == (lhs: Date, rhs: Date) -> Bool
//左日期是否小于右日期
public static func < (lhs: Date, rhs: Date) -> Bool
//左日期是否大于右日期
public static func > (lhs: Date, rhs: Date) -> Bool
//相当于addingTimeInterval方法
public static func + (lhs: Date, rhs: TimeInterval) -> Date
public static func - (lhs: Date, rhs: TimeInterval) -> Date
//相当于addTimeInterval方法
public static func += (lhs: inout Date, rhs: TimeInterval)
public static func -= (lhs: inout Date, rhs: TimeInterval)
  1. 日期描述
  • 通用描述
public var description: String  get 

默认按YYYY-MM-DD HH:MM:SS ±HHMM输出日期,±HHMM代表时区与UTC的时差,以小时和分钟为单位

var d = Date()
print(d, d.description, separator: "\\n")
//2020-12-09 03:16:05 +0000
//2020-12-09 03:16:05 +0000
  • 本地化描述
public func description(with locale: Locale?) -> String

传nil时与description相同

let d = Date()
print(d.description, d.description(with: nil), 
      d.description(with: Locale(identifier: "zh")),  separator: "\\n")
//2020-12-09 03:18:09 +0000
//2020-12-09 03:18:09 +0000
//2020年12月9日 星期三 中国标准时间 上午11:18:09
  1. Strideable协议
  • 与日期other的距离(秒)
public func distance(to other: Date) -> TimeInterval

timeIntervalSince方法的结果值为正负

let d = Date()
print(d.distance(to: d+10))
print(d.timeIntervalSince(d+10))
//10.0
//-10.0
  • 返回增加多少秒后的新日期
public func advanced(by n: TimeInterval) -> Date

addingTimeInterval相同

let d = Date()
print(d, d.advanced(by: 10), d.addingTimeInterval(10), separator: "\\n")
//2020-12-09 03:31:19 +0000
//2020-12-09 03:31:29 +0000
//2020-12-09 03:31:29 +0000

以上是关于swift Date的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.1 Coredata 按字母升序排序,但保留以数字开头的记录

两列 CSV 数据排序 - 一列 str(升序)另一列 date(降序)

[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)

[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)

JavaScript对数组对象进行升序排列

2023-01-11:体育馆的人流量。编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。返回按 visit_date 升序排列 的结果表。 DROP TAB