SwiftDate 汉语文档

By admin in 亚洲必赢官网app on 2018年10月24日

SwiftDate概况

从今Swift发布于,我们便从未有过放弃使用Swift。

自然,我们希望在品种会轻松自如地管理日期与时区,所以创建SwiftDate是类库。有矣“她”在Swift里面优雅地拍卖时。

当iOS、macOS、watchOS、tvOS上,以及Swift兼容的阳台及(Linux)都能圆满运行!

另外,这个类库是免费的,开源之!

新型公布版

摩登版本是4.0.3(Swift3)
最新更新时间:2016-10-03
履新日志:Read
CHANGELOG

获最新版本

老版本

如若您下的凡swift2.2或swift2.3,你可交GitHub
page

  • Swift2.3分支
  • Swift2.2分支

要特色

立刻部分内容是swiftdate里面根本特点之一律良亮点。

  • 日期进行简要数学运算。例如:
    aDate + 2.weeks + 1.hour or (1.year - 2.hours + 16.minutes).fromNow()
  • 时区,地区及日历的转换。使用类DateInRegion,通过组件和操作符进行转账。
  • 算术比较运算比较时。例如,aDate1 >= aDate2 或者
    aDate1.isIn(anotherDate, .day)
  • 采取时组件。比如,用你爱的时区格式表述 aDateInRegion.day
    hour, minutes等等,
  • 最优雅的法子开展时与字符串之间的易。支持由定义(可读之)和固定格式(ISO8601,
    AltRSS, RSS, Extended, .NET和部分如约unicode标准的常规字符串)。
  • 于是别样时间单位描述一个年华段。比如120.seconds.in(.minutes) // 2 minutes
  • 快快获得时间及时距离。(isYesterday,isTomorrow,isBefore()…)
  • …更多令人激动的事体!

环境要求

现阶段官方的版本是v4,一些要求:

  • Swift 3.0+
  • iOS 8 or later
  • macOS 10.10 or later
  • watchOS 2.0 or later
  • tvOS 9.0 or later
  • …任意设置Swift3以及Swift的基本库的阳台

安装

SwiftDate支持多安装方式。

CocoaPods安装方式

CocoaPods是一个Objective-C和Swift的指管理器。

安装CocoaPods命令:

$ gem install cocoapods

SwiftDate 4.+之版用使用CocoaPods 1.0.1+。

Podfile文件

于Xcode项目蒙引入SwiftDate,编辑Podfile新增:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
pod 'SwiftDate', '~> 4.0'
end

Carthage安装方式

Carthage是如出一辙种植非集成的借助管理器,构建依赖,并提供次老大框架。

homebrew安装Carthage

$ brew update
$ brew install carthage

于Xcode项目中以Carthage引入SwiftDate,只待以Cartfile中新增:

github "malcommac/SwiftDate" ~> 4.0

Swift Package Manager安装

当下还未支持!

Fork us on GitHub

SwiftDate是开源的类库,源码托管在GitHub上。

下面的架势可以吧SwiftDate作贡献:

  • 逮捕及一个bug,提供详细步骤复现bug,open一个issue。
  • 提出一个功能性的请求,open一个issue。
  • 贡献代码,提交pr。

Authors & License

SwiftDate是由Daniele
Margutti创建并维护,其中项目之一个生死攸关贡献者是Jeroen
Houtzager。

迎接啊初始源路作出贡献!

此库的源代码遵循MIT
License,
你得无其它限制地以经贸类型中运用!

唯的要求就是搭一行说明:

Date and Time Management is provided by SwiftDate - http://www.swift-date.com
Created by Daniele Margutti and licensed under MIT License.

Your App & SwiftDate

比方你来趣味,可以整理出用SwiftDate这个类库的类。可以当GitHub上起来一个issue,提供您的路名字和链接,我们以见面补充加至本网站上!


根本概念

Date 和 Absolute Time

Date凡是日期以及时间拍卖的基础类。在iOS内部,时间为由 2001年1月1日00:00
UTC 的秒数,作为绝对值存储,Date本着之展开打包,并提供相关方法。

世界各地的当与一个天天,你可以认为是跟一个物体(除非出现了一个初的星球时间体系)。但是附加上各地不同的表达与计量办法,时间虽变换得稍微微复杂。

纯属时间一模一样栽通俗的定义:在美国的 A 正以同于迪拜的 B
进行通话,这个时刻就是可称之为绝对时间;在一如既往时刻都见面出这么的打电话,但是出于时区、不用的日历与不同的字母或标志方法,区域时纵可能无一致。

基础库还支持处理不同之日历体系的 Calendar 日历实例;

每当拍卖跨时区、日历项目和区域之岁月换的时光,都见面碰到有疑难的问题。SwiftDate能够帮您再次速之化解这些题目。

DateInRegion 和 Region

SwiftDate
为了供完整的时间和日期管理之功用,引入了区区个第一的新物以及屡次单扩大。

率先独凡是一个结构体(struct),称为Region:region,正而该名称,它是对准一个地理位置于时光体系受到的讲述,其中饱含三个不同之特色:

当时可能是勿绝重大之标号说明:

GMT(Greenwich Mean Time):指格林威看标准时间;

PST(Pacific Standard Time):指太平洋正式日;

  • TimeZone:
    用来定义时区。时区在肯定程度及意味着了不同地方,因此,地区的名的只是看成时区的称谓,例如夏威夷时区,北京时间。类似之,格林尼治时间(GMT)或美国西头时间(PST)的偏移量,
    也堪用来代表时区,例如东八区(GMT +8)

  • Calendar:
    用来表示日历体系,日历体系定义了年与月的尺寸以及区划。SwiftDate
    提供了不同日历的音信,还支持不同日历下日之计,例如为有绝对时间价值,SwiftDate
    可以确定他以指定日历系统下的日期。

  • local:
    用来代表当地的流年发表方式。由于各地之文化、语言、规范的例外,时间在街头巷尾用不同之相间符或语法来表示。比如
    中国地区相似下 年-月-日 时:分:表,而美国地区大都利用 月-日-年
    时:分:秒

别一个凡DateInRegion,是在一定的国度地区 Region
下,描述一个我与具象时区和日历无关之光阴Date。这是由特定的国地方一般下一定的时区、日历系统以及表达规范,只要声明了国地区,就带有了以上三独因素。实际利用中,使用DateInRegion可方便的操作及下文中之日子。

SwiftDate
为你提供平等之函数和特性,以管理带有地区属性之DateInRegion岁月实例 和
单纯Date日实例。

默认Region

当您采取普通的Date对象,你可以在Date.defaultRegion中定义的DateInRegion,这个地面蕴藏了:

  • .timeZone 因 GMT (Greenwich Mean Time)格式表述的时区
  • .local 以设备的所在地设置日期表述方式
  • .Calendar 设置为设备默认的日历

若得调用 Date.setDefaultRegion(:) 以转移时间的默认地区
Date.defaultRegion

以此可能不极端重大而要如铭记:时间的这些需要以采用启动时设置好(例如,在UIApplication的delegate中函数applicationDidFinishLaunching()丁安就实施了)。


时间之零件

概况


SwiftDate,您可以老方便之操控时间之零部件。无论是否设置地区属性,DateInRegionDate都落实了一如既往效属性和办法来拓展时日期的军事管制。

请求留意:使用简单时间
Date实例时,实际上是因了设施默认的地面来初始化了
.defaultRegionRegion.GMT()举凡由装备默认的localeCalendar以及手上装备所在地的时区所主宰,.defaultRegion
的初始值就是Region.GMT()

一旦想如果改的默认的区域,调用Date的静态方法 .setDefaultRegion()
即可!

填补说明:

时光的这些属于性值需考虑上下文的地带同日历系统;如果调用者是DateInRegion,SwiftDate
将会晤以已经指定的.region来计算具体属性值,如果调用者是日常Date,SwiftDate
将会因默认的Date.defaultRegion来计算属性值。以下有所属性与组件都服从此原则。

era

归来公元状态,我们日常生活中之 2016 年且为公元年为起点,这些时的 era
都为 1 , 而公元前之年度如 -2000 年,这些时刻的 era 都是
0。所以在操作近代时经常,无需考虑此属性。
声明:

public var era: Int

year

归来年份的数值
声明:

public var year: Int

month

回来月份的数值,如 5
声明:

public var month: Int

day

回去年月日中 的数值,如 30
声明:

public var day: Int

hour

回去下秒中 的数值
声明:

public var hour: Int

nearestHour

因四放弃五抱的主意取出时之近期时。简单举例:比如 8:15 会返回 8 ,而
8:50 会回去 9
声明:

public var nearestHour: Int

minute

回来时秒中 的数值
声明:

public var minute: Int

second

回去下秒中 的数值
声明:

public var second: Int

nanosecond

返时的 毫秒的数值
声明:

public var nanosecond: Int

注意
公历日历定义一个星期来7天,一年起356天,或闰年366上。
然而,356要么366还非平均地分为7天的完美,因此便状态下,一年的最后一圆在产一致年之一模一样天结束,一年的首先两全从前一律年起。
为了协调这一点,ISO
8601定义了一个周编号年份,包括52还是53理圆满(364要么371天),以便同年的首先全面被指定为含有一年吃率先只星期四底礼拜。

乃可以拿yearForWeekOfYear属性与weekOfYear和weekday属性配合使用,以博得与同样年被吃一定星期的特定工作日对应之日子。
例如,2005年第53圆满(ISO
2005-W53-6)的第6天对承诺让公历日历上2005年1月1日星期六。比如罗马时刻
2015-12-31 15:10:12 他的 yearForWeekOfYear2016weekOfYear
1weekday3

yearForWeekOfYear

ISO8601
的周数计算规则下,日期所属的春秋。可能是时日期的前面一模一样年,或者下一样年,或者当年。
声明:

public var yearForWeekOfYear: Int

weekOfYear

当 ISO 8601 的周数计算规则下,日期所属的周数。如罗马岁月 2015-11-31 是第
49 周,2015-12-31 是率先周到。
声明:

public var weekOfYear: Int

weekday

当 ISO 8601 的周数计算规则下,在时所属之周中, 是星期几,且规定了
1凡星期,也就是是每周的起点是星期天。如罗马日 2015-11-31 是星期四 ,其
weekday5

声明:

public var weekday: Int

weekdayOrdinal

因为每个月的首先龙吧当月率先周到之起点,无视全年的周日计算规则,比如每个月份第
4 天便是率先圆,第 8 天就是是亚到家。

声明:

public var weekdayOrdinal: Int

weekdayName

有日期的周日名称,如果你设定是中国地区,那周二为“星期二”,日本地区即使是
“火曜日” ,美国地区就算是 “Tuesday”,注意此值取决于地区属性。

声明:

public var weekdayName: String

monthDays

岁月所在月份,该月份的流年,比如公历中, 二月 可能有 29 天要 28 天,12
月有 31龙。
声明:

public var monthDays: Int

quarter

返回季度单位之数值。留意在常识中,一年分为春夏秋冬四季,但于不同地方季度的胚胎时间不同,因此此属性在从来不赋值的状下都为
0 ,当您得采取前,请赋值。

声明:

public var quarter: Int

weekOfMonth

回来月份所蕴涵的周数,此处按照 IOS 8601 的正统,每个月份横跨的周数,比如
2015年2月 的 weekOfMonth 是 4 ,而 2016 年 2 月的 weekOfMonth 是 5

声明:

public var weekOfMonth: Int

shortMonthName

拖欠时空所在月份的简称,比如美国地区 2月全是 February ,简称是 Feb 即
2015-02-01 改时间之 shortMonthName 就是 Feb
声明:

public var monthName: Int

leapMonth

回来一个布尔值,说明某个月份是否是闰月。
true,表示该日所在月份是闰月,否则不是闰月。
声明:

public var leapMonth: Bool

leapYear

回到一个布尔值,说明有年份是否是闰年。
true,表示该时间四处的岁是闰年,否则不是闰年。
声明:

public var leapYear: Bool

补说明:
其一价值将会当该采取的日历与时区的环境被解释;如果调用者是DateInRegion,系统环境将会见采用相关的.region来定义,如果调用者是普普通通Date,系统环境将见面用默认值Date.defaultRegion来定义。

julianDay

儒略日 (Julian Day)
是天文学家使用由朱利安时吧连续的天数。详情请见维基百科词条
儒略日
声明:

public var julianDay: Double

modifiedJulianDay

儒略日 (Julian Day)
有部分排列的精打细算方法,由于用是天文领域,且跟阳历换算复杂,此处不进行叙述,详情请见维基百科词条
Julian
Day

声明:

public var modifiedJulianDay: Double

previousWeekend

归来该时空所在周的达标单星期天,这个星期因为元组表示,第一只要素是上周末起来的流年,第二独凡是上周末底扫尾时。且这点儿个时刻还是
DateInRegion 实例。
在意:是上个周底星期,不是时刻自然所在周的礼拜

声明:

public var previousWeekend: (startDate: DateInRegion, endDate: DateInRegion)?

thisWeekend

回去该时空所在周的星期天,这个星期以元组表示,第一独要素是随周末开班之时日,第二个是按部就班周末的结束时间。且立即点儿只时刻都是
DateInRegion 实例。

声明:

public var thisWeekend: (startDate: DateInRegion, endDate: DateInRegion)?

nextWeekend

回去该日所在周的生只星期,这个星期盖元组表示,第一只元素是下礼拜初步的年月,第二个是生礼拜之终结时。且立即片单日子都是
DateInRegion 实例。
留意:是生只完美的周末,不是日本所在周的星期天
声明:

public var nextWeekend: (startDate: DateInRegion, endDate: DateInRegion)?

isToday

回布尔值,返回调用此属性的时刻实例是否以今。
声明:

public var isToday: Bool

isYesterday

归来布尔值,返回调用此属性的工夫实例是否当昨天。
声明:

public var isYesterday: Bool

isTomorrow

回去布尔值,返回调用此属性的光阴实例是否在明天。
声明:

public var isTomorrow: Bool

isInWeekend

回布尔值,返回调用此属性的流年实例是否以那个所在周的周日时空段内。
声明:

public var isInWeekend: Bool

isInPast

比该日实例与眼前时刻,换算成时切值来,比较异常小,如果比较当下日子有些,即为过去光阴,返回
true;反之,返回 false。简言之:早于现在无时无刻的时间 返回 true
声明:

public var isInPast: Bool

isInFuture

较该时空实例与当下时,换算成日切值来,比较坏小,如果比较当下时空十分,即为将来时间,返回
true;反之,返回 false。简言之:晚于现在天天的年华 返回 true

声明:

public var isInFuture: Bool

isInSameDayOf()

于时实例与给定的年月是不是为于同一天。比较常采用调用者的时区和日历设置。
声明:

public func isInSameDayOf(date: DateInRegion) -> Bool
public func isInSameDayOf(date: Date) -> Bool

startOfDay

回去时日所在 的原初时刻,比如 2016-11-11 23:10:00 的
startOfDay 是 2016-11-11 00:00:00 。注意会构成时区和日历。
声明:

public var startOfDay: DateInRegion
public var startOfDay: Date

endOfDay

回来时工夫所在 的竣工时刻,比如 2016-11-11 23:10:00 的
startOfDay 是 2016-11-11 23:59:59 。注意会构成时区和日历。
声明:

public var endOfDay: DateInRegion
public var endOfDay: Date

nextMonth

日子所在月份的下一个月份之同一日的序曲时间,比如 2016-03-31 13:30:00 的
nextMonth 是 2016-04-30 00:00:00,注意 SwiftDate
会自动换算不同月份天数不同的问题。
声明:

public var nextMonth: DateInRegion
public var nextMonth: Date

prevMonth

时刻所在月份的上一个月的同一日的发端时间,比如 2016-03-31 13:30:00 的
nextMonth 是 2016-02-29 00:00:00,注意 SwiftDate
会自动换算不同月份天数不同之题材。
声明:

public var prevMonth: DateInRegion 
public var prevMonth: Date

startOf()

叫一定一个单位,返回时以斯单位的序曲值,比如给一定以年呢单位, 2016-11-11
11:11:11 的 startOf() 是 2016-01-01 00:00:00 ;给定 时 为单位,会反回
2016-11-11 11:00:00
声明:

public func startOf(component: Calendar.Component) -> DateInRegion
public func startOf(component: Calendar.Component) -> Date

分析及创造时间

概览


一个提到到现实地域的时空可由多种方式创建;这种时间可以由一对 Date
Region 组成,或者打于定义时间格式的字符串解析(SwiftDate
支持于定义之日子格式,诸如 ISO8601
标准格式,RSS
或AltRSS
和 .NET
时间),再要可以经过解析
Calendar.Component对象的聚合来创造。
自你吧足以透过数学运算从另两只时间来新建时。
本章节位列了拥有有关创建时间的艺术,无论是否带有地域信息,DateInRegion
Date 都适用于这些点子。

基于字符串解析时


显然,解析字时间符串并转换成时实例很麻烦。SwiftDate
支持多时光格式,以支援您提高效率,减少开支。
format 参数赋值,以宣称你以的时光格式:可以是打定义时间格式或
ISO8601 datetime、.NET datetime 等标准化时间格式。

声明
func init(string: String, format: DateFormat, fromRegion region: Region? = nil) throws

参数

  • string : this is the string you want to parse
  • format : this is the format in which you expect the string is
    formatted. DateFormat is an enum: .custom (for custom format),
    .iso8601 to parse all available specs for ISO8601 DateTime Format,
    .extended to parse Extended DateTime format, .rss to parse both
    RSS and AltRSS datetime formats and .dotNET to parse .NET datetime
    strings.
  • region : is the region in which you want to express specified
    date. If nil or not specified Region.Local(( is used instead.

回结果
回到结果是 包含地区信息的 DateInRegion 时间实例。
例子

let rome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italian)

// 基于自定义时间格式解析时间字符串
let date1 = try! DateInRegion(string: "1999-12-31 23:30:00", format: .custom("yyyy-MM-dd HH:mm:ss"), fromRegion: regionRome)

// 基于 AltRss 标准来解析时间字符串
let date2 = try! "3 feb 2001 15:30:00 +0100".date(format: .rss(alt: true), fromRegion: regionRome)
// 同上
let date3 = try! DateInRegion(string: "3 feb 2001 15:30:00 +0100", format: .ss(alt: true)), fromRegion: regionRome)

//  解析 ISO8601 标准互联网时间字符串
let date4 = DateInRegion(string: "2001-02-03T15:30:00+01:00", format: .iso8601(options: .withInternetDateTime), fromRegion: regionRome)

// 解析自定义时间格式字符串
let date5 = try! DateInRegion(string: "sab 3 feb 2001, 30 minutes after 15 (timezone is +0100)", format: .custom("eee d MMM YYYY, m 'minutes after' HH '(timezone is' Z')'"), fromRegion: regionRome)

赢得当前无时无刻的时实例


利用默认的 init() 方法而快捷的创立基于设备时地方和天天的
DateInRegion 时间实例。

声明
func init()

回到结果
返回的 DateInRegion
对象定义了时时时(Date())和设施时之四面八方地段,此地区属性(Region.Local())包含了时区
.timeZone、区域时格式 .locale、当地日历种类 .calendar
(所有相关安装都见面自动更新)

增补说明:地区 包含了3只特性:时区(如 GMT +8)、当地时间格式(如中国因
年-月-日,美国为 月-日-年)、日历项目(如公历、日本日历、佛教日历)

例子

// Create a new DateInRegion which represent the current moment (Date()) in current device's local settings
let now = DateInRegion()

冲加的随时和地方来创造时间实例


加以时间及该所在地区,你得创造对应的 DateInRegion 对象。创建后,使用
DateInRegion
对象开展的有着操作,都将用对应地区的渴求;DateInRegion对应之性与方法会自动套用区域的装;
声明
func init(absoluteDate date: Date, in region: Region)
参数

  • date: define the absolute Date you want to use to create the new
    DateInRegion. Passed date is indipendent from any geographic
    timezone/calendar or locale because it’s expressed in absolute time.
  • region: define the destination Region in which you want to
    express passed date

归来结果
回来对象是一个解析自给定地区的 DateInRegion 时间实例。

例子

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
// Resulting object is DateInRegion which express the current moment in Rome
let dateInRome = DateInRegion(absoluteDate: Date(), in: regionRome)

因日期要素创建时间


将日历的素集合以 DateComponents 对象封装后创造 DateInRegion
时间是外一样种好办法。DateComponents 实例化对象的TimeZone Locale
Calendar
属性都必声明以确保收获的光阴中;如果差失任何一个,将会丢弃来
.MissingCalTzOrLoc 异常。

声明
func init(components: DateComponents)

参数

  • components: components used to generate the new date

回到结果
回到一个 DateInRegion 时间实例,其日期由传入的 DateComponets
来决定;

例子

var cmp = DateComponents()
cmp.timeZone = TimeZoneName.europeOslo.timeZone
cmp.calendar = CalendarName.gregorian.calendar
cmp.calendar?.locale = LocaleName.englishNorway.locale
cmp.year = 2005
cmp.month = 4
cmp.day = 15
cmp.hour = 20
cmp.minute = 30

// create a new DateInRegion on 15 Apr 2005, 20:30:00 GMT+2
let date = try! DateInRegion(components: cmp)

因日组件创建时间


传播一组 Calendar.Component
与对应值组成的数组(由[Calendar.Component:Int]
样式的字典和现实的地域所定义)来创造一个新的 DateInRegion 时间实例
声明
func init(components: [Calendar.Component:Int], in region: Region)

参数

  • components: components used to generate the new date. It’s a
    dictionary where keys are Calendar.Component and values are Int
    with relative value. Supported components are:
    .day,.era,.hour,.minute,.month,.nanosecond,.quarter,.second,.weekOfMonth,.weekOfYear,.weekday,.weekdayOrdinal,.year,
    .yearForWeekOfYear
  • region: is the region in which you want to express specified date.
    If nil or not specified Region.Local(( is used instead.

返回结果
归来一个 DateInRegion 时间实例,其组件由传入的 DateComponets
来决定;

例子

let c: [Calendar.Component : Int] = [.year: 2002, .month: 3, .hour: 5, .day: 4, .minute: 6, .second: 7, .nanosecond: 87654321]
// create a new DateInRegion on 2002-03-04 at 05:06:07.87654321 (+/-10) in Region.Local()
let date = try! DateInRegion(components: c, fromRegion: nil)

修改时间

SwiftDare 中文版说明文档 – 修改时 – 5

@(丁香园学习笔记)[swift, 翻译]

概览


使用 SwiftDate
来针对日开展有关修改操作十分方便;修改时组件,比较少单时间(时间之不等为她们中间的异组件来表示)。无论是带有地区属性之
DateInRegion 时间实例还是单一结构的 Date
时间实例,都可开展这些操作。

数学运算


啊日长组件
而可以 Swift 中常用数学运算符,来增减时间元素的价。如+-

据悉你所发挥的上下文,SwiftDate 会自动判断连扭转带有地区属性之
DateInRegion 时间实例或纯粹结构的 Date 时间实例。
可用之年月组件有:
nanoseconds,seconds,minutes,hours,days,weeks,years
下面是片数学运算的例证:

// 创建一个罗马时间 2015-01-03 @ 15:10:00
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
var date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

// 让我试试数学运算符修改时间元素值
date = date + 3.seconds + 15.minutes // -> 03 gen 2015, 15:25:03 CET
date = date - 120.seconds // minus 2 minutes -> 03 gen 2015, 15:23:03 CET
date = date + 3.weeks // 24 gen 2015, 15:23:03 CET
// 你也可以直接增加绝对秒数,SwiftDate 会自动帮你换算
date.add(interval: 10) // 24 gen 2015, 15:23:03 CET

较时


概述
以 Swift3 的 Foundation 库中,已经支撑比较 Date 时间实例。
SwiftDate 为带有地区属性之 DateInRegion
补充了一般之较艺术,并透过丰富新措施扩充了现有 Foundation
库对两样粒度下之光阴较。

比较简单时间
汝可以采用 >,>=,<,=< 运算符来比较时,例如:

// 03 gen 2015, 15:10:00 CET
let date1 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
let date2 = try! DateInRegion(components: [.year: 2015, .month: 2, .day: 5, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

if date2 > date1 { // DateInRegion supports Equatable protocol you can use >=, <=, < or >
    print("'\(date2)' date is later than '\(date1)'")
}

if date2 == date1 {
  // simple equality
}

时刻所对应之单位打始值


概述
利用 .startOf()
方法,传入计算单位后,你可获改观时间到现在的差值。补充说明:时间是一个沾值,而时间的单位还是一段时间的差值,这里的起始值指的哪怕是时间点值在时间单位之间隔中之左边界值;比如,2016-11-11
20:39:50 ,以月为单位,起始值是 2016-11-01 00:00:00;以时吗单位
,起始值是 2016-11-11 20:00:00。
声明
startOf(component: Calendar.Component) -> DateInRegion
startOf(component: Calendar.Component) -> Date

参数

  • component: component to alter

返回值
回到给定时间单位距离的起始值所对应之 DateInRegion/Date 时间实例。

例子

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)

// 03 gen 2015, 15:10:00 CET
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

let startOfHour = date.startOf(component: .hour) // 03 gen 2015, 15:00:00 CET
let startOfMonth = date.startOf(component: .month) // 01 gen 2015, 00:00:00 CET
let startOfWeek = date.startOf(component: .weekOfMonth) // 28 dic 2014, 00:00:00 CET

时光所对应之单位收值

概述
利用 .startOf() 方法,传入单位后,你可以落现有时间对应的结束址。

声明
endOf(component: Calendar.Component) -> DateInRegion
endOf(component: Calendar.Component) -> Date

参数

  • component: component to alter

回到结果
回到给定时间单位距离的终止址所对应之 DateInRegion/Date 时间实例。

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)

// 03 gen 2015, 15:10:00 CET
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

let startOfHour = date.endOf(component: .hour) // 03 gen 2015, 15:59:59 CET
let startOfMonth = date.endOf(component: .month) // 31 gen 2015, 23:59:59 CET
let startOfWeek = date.endOf(component: .weekOfMonth) // 03 gen 2015, 23:59:59 CET

本着时之时刻进行改动

概述
对现有的流年实例, .atTime(hour:minute:second)
方法可以修改时刻,提供
的价,获得一个新的日,新的实例中日期以及日期无换。
异常
比方原本时间未可知好成新时间,会丢弃来 .FailedToCalculate 异常。

声明
func atTime(hour: Int, minute: Int, second: Int) throws -> DateInRegion
func atTime(hour: Int, minute: Int, second: Int) throws -> Date

参数

  • hour: hour(s) to set
  • minute: minute(s) to set
  • second: second(s) to set

回结果
于原本时间基础及,依据你提供的变化一个初时间实例,地区设置保障不更换。此外,其他的年华组件在必要常常
SwiftDate 会加以修改,以保合理。

例子

// 生成一个新的罗马时间,日历格式选择公历,时间表述格式以意大利为准。
// 03 gen 2015, 15:10:00 CET
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

// 应用 `.atTime()` 方法
let newDateAtGivenTime = try! date.atTime(hour: 09, minute: 10, second: 22) // 03 gen 2015, 09:10:22 CET

针对时间之指定组件进行修改

概述
本着点名的时组件的价值进行改动,在保险其他零件值合理的情形下,返回一个初的时间实例。

声明
func at(unit: Calendar.Component, value: Int) throws -> DateInRegion
func at(unit: Calendar.Component, value: Int) throws -> Date

参数

  • unit: calendar component unit to alter

异常
倘若给定的零部件赋值不成事,不可知充分成新时间实例时,会丢弃来
.FailedToCalculate 异常。

回去结果
于原时间基础及,修改为得组件的值,然后变新的年月实例并回到。SwiftDate
在情理之中之前提下非会见变动和给定组件相比单位还充分组件的价值。补充说明:如果改动了时中
的值,那具的相当再粗之零件的价都见面给赋予最小值 ,而

等再度充分单位之组件的值会保持原样,这样做是为保全合理,03-31,如果对月转移成为
2 ,那2-31 很扎眼不客观。比如 2016-11-11 11:11:11 修改了 12
那,返回的初的辰是 2016-12-01 00:00:00

例子

// 生成一个新的罗马时间,日历格式选择公历,时间表述格式以意大利为准。
// 03 gen 2015, 15:10:00 CET
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

let atGivenYear = try! date.at(unit: .year, value: 2020) // 01 gen 2020, 00:00:00 CET. day is altered

批量窜时组件的价值


概述
受一定一个 [时间组件 : 值] 的字典,SwiftDate
会根据时间组件的单位增加排序,并修改对诺组件的价。
在 SwiftDate 中,规定时组件的增加排序为:
.nanosecond,.second,.minute,.hour,.day,.month,.year,.yearForWeekOfYear,.weekOfYear,.weekday,.quarter,.weekdayOrdinal,.weekOfMonth.

声明
func at(unitsWithValues dict: [Calendar.Component : Int]) throws -> DateInRegion
func at(unitsWithValues dict: [Calendar.Component : Int]) throws -> Date

参数

  • unitsWithValues: calendar component units to alter

异常
对某些日子组件赋值发生误时,会丢弃来 .FailedToCalculate 异常。

回去结果
针对点名组件赋值后,生成一个新的辰实例,比为定时间组件更充分之零件将无见面让改,更有些之假设没有赋值将全体给最小价;这有的底规律,在高达一个措施吃来补充说明。

例子

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
// 03 gen 2015, 15:10:00 CET
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)

let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
let time = try! date.at(unitsWithValues: [.year: 2016, .month: 7]) // 01 gen 2016, 00:00:00 CET

落多个时间受到的最靠前(时间线上无与伦比负右的)的流年

概述
在加的几近只日子实例集合中,返回其中最新的时实例。比较依据绝对时间价值,时间实例的地方,时区,表述格式等零件不会见针对比较结实有潜移默化。

声明
(DateInRegion) static func latestDate(_ list: [DateInRegion]) -> DateInRegion
(Date) static func latestDate(_ list: [DateInRegion]) -> Date

例子

// date1 = 2015-01-03 15:10:00
let date1 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
// date2 = 2014-12-30 20:10:00
let date2 = try! DateInRegion(components: [.year: 2014, .month: 12, .day: 30, .hour: 20, .minute: 10, .second: 0], fromRegion: regionRome)
// date3 = 2015-01-03 15:20:00
let date3 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 20, .second: 0], fromRegion: regionRome)

// get the latest date in a set
let latestDate = DateInRegion.latestDate([date1,date2,date3]) // is date1 (2015-01-03 14:20:00 +0000)
// or directly via Array extension
let latestDate = [date1,date2,date3].latestDate

落多个日子受到极度悠久(时间线达最好负左的)的日子

概述
于加的大都单时刻实例集合中,返回其中最为久的流年。比较依据绝对时间价值,时间实例的地面,时区,表述格式等零件不见面指向比较结实发生影响。

声明
(DateInRegion) static func earliestDate(_ list: [DateInRegion]) -> DateInRegion
(Date) static func earliestDate(_ list: [DateInRegion]) -> Date

例子

// date1 = 2015-01-03 15:10:00
let date1 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
// date2 = 2014-12-30 20:10:00
let date2 = try! DateInRegion(components: [.year: 2014, .month: 12, .day: 30, .hour: 20, .minute: 10, .second: 0], fromRegion: regionRome)
// date3 = 2015-01-03 15:20:00
let date3 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 20, .second: 0], fromRegion: regionRome)

// get the latest date in a set
let earliestDate = DateInRegion.earliestDate([date1,date2,date3]) // is date2 30 dic 2014, 20:10:00 CET
// or directly via Array extension
let earliestDate = [date1,date2,date3].earliestDate

加单位,比较单薄时实例

概述
每当给定单位之前提下,比较现有时间是不是晚于提供的时刻。

声明
func compare(to date: DateInRegion, granularity: Calendar.Component) -> ComparisonResult
func compare(to date: Date, granularity: Calendar.Component) -> ComparisonResult

参数

  • date: date to compare
  • granularity:
    你所期待之于粒度至少要比少日子里面的无限充分异组件之间一旦稍,否则比较结实会显得等。
    加说明
    以和一个月的星星只不同时间时,以
    为单位较常,是相当的,比如(伪代码)
    date1 = 2016-11-11 11:11:11
    date2 = 2016-11-12 11:11:11
    或者再次有些之之单位于,返回结果虽是date2 更大

是不是早于某时(给定单位)

概述
于加单位前提下,比较现有时间是否早于给定时间。

声明
func isBefore(date: DateInRegion, orEqual: Bool = false, granularity: Calendar.Component) -> Bool
func isBefore(date: Date, orEqual: Bool = false, granularity: Calendar.Component) -> Bool

参数

  • date: date to compare
  • orEqual: true to also check for equality
  • granularity: The smallest unit that must, along with all larger
    units, be less for the given dates.

是不是晚于某日(给定单位)

概述
每当给定单位粒度前提下,比较现有时间是否晚于给定时间。

声明
func isAfter(date: DateInRegion, orEqual: Bool = false, granularity: Calendar.Component) -> Bool
func compare(to date: Date, granularity: Calendar.Component) -> ComparisonResult
func isAfter(date: Date, orEqual: Bool = false, granularity: Calendar.Component) -> Bool

参数

  • date: date to compare
  • orEqual: true to also check for equality
  • granularity: The smallest unit that must, along with all larger
    units, be less for the given dates.

是不是当有日

概述
于现有时间实例是否完全等于给定时间。

声明
func isEqual(to compareDate: DateInRegion) -> Bool

参数

  • compareDate: a date to compare against

修改时间

SwiftDare 中文版说明文档 – 修改时间 – 5

@(丁香园学习笔记)[swift, 翻译]

概览


运用 SwiftDate
来对时展开连锁修改操作非常便捷;修改时间组件,比较简单个时刻(时间之两样为他们之间的不比组件来代表)。无论是带有地区属性的
DateInRegion 时间实例还是单一结构的 Date
时间实例,都可以进行这些操作。

数学运算


为时间累加组件
你可以采用 Swift 中常用数学运算符,来增减时间元素的值。如+-

根据你所发表的上下文,SwiftDate 会自动判断连扭转带有地区属性的
DateInRegion 时间实例或纯粹结构的 Date 时间实例。
可用的时日组件有:
nanoseconds,seconds,minutes,hours,days,weeks,years
下是部分数学运算的事例:

// 创建一个罗马时间 2015-01-03 @ 15:10:00
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
var date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

// 让我试试数学运算符修改时间元素值
date = date + 3.seconds + 15.minutes // -> 03 gen 2015, 15:25:03 CET
date = date - 120.seconds // minus 2 minutes -> 03 gen 2015, 15:23:03 CET
date = date + 3.weeks // 24 gen 2015, 15:23:03 CET
// 你也可以直接增加绝对秒数,SwiftDate 会自动帮你换算
date.add(interval: 10) // 24 gen 2015, 15:23:03 CET

正如时


概述
在 Swift3 的 Foundation 库中,已经支撑于 Date 时间实例。
SwiftDate 为含有地区属性之 DateInRegion
补充了相似之比艺术,并通过添加新点子扩充了现有 Foundation
库对两样粒度下之时比。

比较简单时间
您得下 >,>=,<,=< 运算符来比较时,例如:

// 03 gen 2015, 15:10:00 CET
let date1 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
let date2 = try! DateInRegion(components: [.year: 2015, .month: 2, .day: 5, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

if date2 > date1 { // DateInRegion supports Equatable protocol you can use >=, <=, < or >
    print("'\(date2)' date is later than '\(date1)'")
}

if date2 == date1 {
  // simple equality
}

时光所对应之单位自始值


概述
利用 .startOf()
方法,传入计算单位后,你可以取得改观时间及本之差值。补充说明:时间是一个接触值,而日之单位都是一段时间的差值,这里的起始值指的即使是时点值在时单位之区间中的左界值;比如,2016-11-11
20:39:50 ,以月也单位,起始值是 2016-11-01 00:00:00;以时也单位
,起始值是 2016-11-11 20:00:00。
声明
startOf(component: Calendar.Component) -> DateInRegion
startOf(component: Calendar.Component) -> Date

参数

  • component: component to alter

返回值
返给定时间单位距离的起始值所对应的 DateInRegion/Date 时间实例。

例子

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)

// 03 gen 2015, 15:10:00 CET
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

let startOfHour = date.startOf(component: .hour) // 03 gen 2015, 15:00:00 CET
let startOfMonth = date.startOf(component: .month) // 01 gen 2015, 00:00:00 CET
let startOfWeek = date.startOf(component: .weekOfMonth) // 28 dic 2014, 00:00:00 CET

时所对应的单位收值

概述
利用 .startOf() 方法,传入单位后,你得获得现有时间对应之结束址。

声明
endOf(component: Calendar.Component) -> DateInRegion
endOf(component: Calendar.Component) -> Date

参数

  • component: component to alter

回去结果
返给定时间单位距离的扫尾址所对应之 DateInRegion/Date 时间实例。

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)

// 03 gen 2015, 15:10:00 CET
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

let startOfHour = date.endOf(component: .hour) // 03 gen 2015, 15:59:59 CET
let startOfMonth = date.endOf(component: .month) // 31 gen 2015, 23:59:59 CET
let startOfWeek = date.endOf(component: .weekOfMonth) // 03 gen 2015, 23:59:59 CET

本着时的时刻进行改动

概述
针对现有的辰实例, .atTime(hour:minute:second)
方法可改时刻,提供
的价,获得一个初的时刻,新的实例中日期和日期不换。
异常
如原本时间不克很成新时间,会丢来 .FailedToCalculate 异常。

声明
func atTime(hour: Int, minute: Int, second: Int) throws -> DateInRegion
func atTime(hour: Int, minute: Int, second: Int) throws -> Date

参数

  • hour: hour(s) to set
  • minute: minute(s) to set
  • second: second(s) to set

归来结果
于本来时间基础及,依据你提供的转一个初时间实例,地区安装保障不移。此外,其他的日组件在必要经常
SwiftDate 会加以修改,以保全合理。

例子

// 生成一个新的罗马时间,日历格式选择公历,时间表述格式以意大利为准。
// 03 gen 2015, 15:10:00 CET
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

// 应用 `.atTime()` 方法
let newDateAtGivenTime = try! date.atTime(hour: 09, minute: 10, second: 22) // 03 gen 2015, 09:10:22 CET

对日的指定组件进行修改

概述
对点名的时刻组件的价进行改动,在保其他零件值合理的景象下,返回一个初的日子实例。

声明
func at(unit: Calendar.Component, value: Int) throws -> DateInRegion
func at(unit: Calendar.Component, value: Int) throws -> Date

参数

  • unit: calendar component unit to alter

异常
假设给定的零部件赋值不成事,不能够杀成新时间实例时,会弃来
.FailedToCalculate 异常。

回结果
在原来时间基础及,修改被一定组件的价值,然后变新的时实例并赶回。SwiftDate
在成立的前提下未会见转以及给定组件相比单位又特别组件的价。补充说明:如果改动了时间中
的价值,那具的当还粗的零件的值都见面于授予最小值 ,而

等再充分单位之零件的值会保持原样,这样做是为维持合理,03-31,如果对月转移成为
2 ,那2-31 很肯定不成立。比如 2016-11-11 11:11:11 修改了 12
那,返回的新的时日是 2016-12-01 00:00:00

例子

// 生成一个新的罗马时间,日历格式选择公历,时间表述格式以意大利为准。
// 03 gen 2015, 15:10:00 CET
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)
let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)

let atGivenYear = try! date.at(unit: .year, value: 2020) // 01 gen 2020, 00:00:00 CET. day is altered

批量改时间组件的价


概述
叫得一个 [时间组件 : 值] 的字典,SwiftDate
会根据日组件的单位充实排序,并修改对承诺组件的值。
每当 SwiftDate 中,规定时间组件的增加排序也:
.nanosecond,.second,.minute,.hour,.day,.month,.year,.yearForWeekOfYear,.weekOfYear,.weekday,.quarter,.weekdayOrdinal,.weekOfMonth.

声明
func at(unitsWithValues dict: [Calendar.Component : Int]) throws -> DateInRegion
func at(unitsWithValues dict: [Calendar.Component : Int]) throws -> Date

参数

  • unitsWithValues: calendar component units to alter

异常
本着某些时刻组件赋值发生误时,会扔来 .FailedToCalculate 异常。

回结果
针对点名组件赋值后,生成一个初的时刻实例,比让定时间组件更特别的零件将非会见叫改动,更粗的如没有赋值将全给最小值;这部分的规律,在直达一个办法被产生补充说明。

例子

// Create a Region in Rome TimeZone with Gregorian Calendar and Italy locale settings
// 03 gen 2015, 15:10:00 CET
let regionRome = Region(tz: TimeZoneName.europeRome, cal: CalendarName.gregorian, loc: LocaleName.italianItaly)

let date = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
let time = try! date.at(unitsWithValues: [.year: 2016, .month: 7]) // 01 gen 2016, 00:00:00 CET

获得多个时间被之极端负前(时间线上极度倚重右的)的日

概述
以加的大多单日子实例集合中,返回其中最新的时间实例。比较依据绝对时间价值,时间实例的所在,时区,表述格式等零件不见面针对比较结实产生潜移默化。

声明
(DateInRegion) static func latestDate(_ list: [DateInRegion]) -> DateInRegion
(Date) static func latestDate(_ list: [DateInRegion]) -> Date

例子

// date1 = 2015-01-03 15:10:00
let date1 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
// date2 = 2014-12-30 20:10:00
let date2 = try! DateInRegion(components: [.year: 2014, .month: 12, .day: 30, .hour: 20, .minute: 10, .second: 0], fromRegion: regionRome)
// date3 = 2015-01-03 15:20:00
let date3 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 20, .second: 0], fromRegion: regionRome)

// get the latest date in a set
let latestDate = DateInRegion.latestDate([date1,date2,date3]) // is date1 (2015-01-03 14:20:00 +0000)
// or directly via Array extension
let latestDate = [date1,date2,date3].latestDate

获得多独日子吃尽遥远(时间线达极其负左的)的流年

概述
在加的差不多单日子实例集合中,返回其中最为遥远的辰。比较依据绝对时间价值,时间实例的地面,时区,表述格式等零件不见面针对比较结实产生潜移默化。

声明
(DateInRegion) static func earliestDate(_ list: [DateInRegion]) -> DateInRegion
(Date) static func earliestDate(_ list: [DateInRegion]) -> Date

例子

// date1 = 2015-01-03 15:10:00
let date1 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 10, .second: 0], fromRegion: regionRome)
// date2 = 2014-12-30 20:10:00
let date2 = try! DateInRegion(components: [.year: 2014, .month: 12, .day: 30, .hour: 20, .minute: 10, .second: 0], fromRegion: regionRome)
// date3 = 2015-01-03 15:20:00
let date3 = try! DateInRegion(components: [.year: 2015, .month: 1, .day: 3, .hour: 15, .minute: 20, .second: 0], fromRegion: regionRome)

// get the latest date in a set
let earliestDate = DateInRegion.earliestDate([date1,date2,date3]) // is date2 30 dic 2014, 20:10:00 CET
// or directly via Array extension
let earliestDate = [date1,date2,date3].earliestDate

加以单位,比较单薄时日实例

概述
以加单位的前提下,比较现有时间是否晚于提供的光阴。

声明
func compare(to date: DateInRegion, granularity: Calendar.Component) -> ComparisonResult
func compare(to date: Date, granularity: Calendar.Component) -> ComparisonResult

参数

  • date: date to compare
  • granularity:
    你所企盼的于粒度至少要比较简单日之间的太深不同组件之间要聊,否则比较结实碰头显得等。
    增补说明
    以同一个月份的一定量独例外时空时,以
    为单位较时,是当的,比如(伪代码)
    date1 = 2016-11-11 11:11:11
    date2 = 2016-11-12 11:11:11
    或者重新粗之之单位于,返回结果虽是date2 更大

是不是早于某时(给定单位)

概述
当加单位前提下,比较现有时间是否早于给定时间。

声明
func isBefore(date: DateInRegion, orEqual: Bool = false, granularity: Calendar.Component) -> Bool
func isBefore(date: Date, orEqual: Bool = false, granularity: Calendar.Component) -> Bool

参数

  • date: date to compare
  • orEqual: true to also check for equality
  • granularity: The smallest unit that must, along with all larger
    units, be less for the given dates.

是不是晚于某时(给定单位)

概述
于给定单位粒度前提下,比较现有时间是不是晚于给定时间。

声明
func isAfter(date: DateInRegion, orEqual: Bool = false, granularity: Calendar.Component) -> Bool
func compare(to date: Date, granularity: Calendar.Component) -> ComparisonResult
func isAfter(date: Date, orEqual: Bool = false, granularity: Calendar.Component) -> Bool

参数

  • date: date to compare
  • orEqual: true to also check for equality
  • granularity: The smallest unit that must, along with all larger
    units, be less for the given dates.

是否等有日

概述
比较现有时间实例是否完全等于给定时间。

声明
func isEqual(to compareDate: DateInRegion) -> Bool

参数

  • compareDate: a date to compare against

时光的格式化

概览
SwiftDate
提供多独方便的法门来输出或分析时与岁月距离字符串,以下为广大时间格式举例:
使用 tr35-31
格式的流年格式字符串,例如 yyyy-MM-dd
对应 2015-01-05

随机符合 ISO8601
和其子规范的岁月格式字符串

符合 .NET
的日格式字符串

扩展化日期/时间格式,详情请参照
EDTF

声明单位的时空各异,如 (date2 – date1).in(.hours)

人类可读或口语化的字符串,如 “1 hour ago”, “1m”, “now”

有限只日子里的差值,比如 “2h,5m,3s”

赢得自定义格式的年华字符串

若得行使 .string()
办法传入自定义格式,获得时间实例生成对应之字符串。字符串的 Unicode
规范和 Cocoa 用法平。
声明 DateFormat
包含了 .custom
从定义格式,你得下通用的// with DateFormat set to .custom([format
string])
func string(format: DateFormat) -> String

呢可以直接运用接受由定义格式的方法// shortcut to pass directly the
format of the string
func string(custom: String) -> String

参数
format
: a DateFormat
struct. To use custom strings pass .custom()
and pass the value of the formatter

例子

let date = DateInRegion()

let str = date.string(format: .custom(“yyyy-MM-dd HH:mm:ss”)) // example
output: 2016-09-28 13:48:17
// you can also use the shortcut:
let str = date.string(custom: “yyyy-MM-dd HH:mm:ss”) // same result

得到 ISO8601 格式的时日字符串
SwiftDate 支持 ISO8601
光阴标准之持有要求。你得依据其子规范而起定义格式。
声明// with DateFormat set to .custom() func string(format:
DateFormat) -> String

参数
format
: a DateFormat
struct. To use custom strings pass .custom() and pass the value of the
formatter

例子

let date = DateInRegion()

// Here some combinations of ISO8601DateTimeFormatter.Options you can
set to format (or parse) an ISO8601 datetime
let iso8601_ex_1 = date.string(format: .iso8601(options:
[.withInternetDateTime])) // 2016-09-29T10:47:39+02:00
let iso8601_ex_2 = date.string(format: .iso8601(options:
[.withFullDate])) // 2016-09-29
let iso8601_ex_3 = date.string(format: .iso8601(options:
[.withWeekOfYear,.withYear])) // 2016W40
let iso8601_ex_4 = date.string(format: .iso8601(options:
[.withFullTime,.withFullDate,.withSpaceBetweenDateAndTime])) //
2016-09-29 10:49:42+02:00
let iso8601_ex_5 = date.string(format: .iso8601(options:
[.withMonth,.withYear,.withTime])) // 20160910:50:36

收获 AltRss 格式的时光字符串
SwiftDate 也供针对性 RSS
和AltRSS
时间格式的支持。(包括分析及生成字符串)
声明func string(format: DateFormat) -> String // with DateFormat
set to .rss(alt: Bool)

参数
format
: a DateFormat
struct. To get RSS/AltRSS
pass.rss(alt: Bool)
and pass true
or false
to set the alt format.

例子

let date = DateInRegion()

let altrss_string = date.string(format: .rss(alt: true)) // Alt RSS
Format: 29 Sep 2016 10:55:34 +0200
let rss_string = date.string(format: .rss(alt: false)) // RSS Format:
Thu, 29 Sep 2016 10:55:34 +0200

抱 .NET 格式的岁月字符串
SwiftDate 也供针对性 .NET
时光格式的支持。(包括分析及生成字符串)
声明func string(format: DateFormat) -> String // with DateFormat
set to .dotNET

参数
format
: a DateFormat
struct. To get .NET
pass.dotNET
and pass true
or false
to set the alt format.

例子

let date = DateInRegion()

let donet_string = date.string(format: .dotNET) //
/Date(1475139751633+0200)/

获得扩展化(EDTF)格式的时空字符串
SwiftDate 也提供对扩展化日期/时间格式的支撑。
声明func string(format: DateFormat) -> String // with DateFormat
set to .extended

参数
format
: a DateFormat
struct. To get extended datetime formatted string pass .extended
and pass true
or false
to set the alt format.

例子

let date = DateInRegion()

let str = date.string(format: .extended) // Thu 29-Sep-2016 AD
11:31:23.886 GMT+2

收获时间距离的字符串表述
凭借 SwiftDate
,你可以生便宜的拿时刻距离或少数个日子之内的差值,以一个要多单单位输出成字符串。如果您想要博取的低级单位的值好于整体进位,那低级单位所对应的价就是吃赋值为
0。比如 120秒 如果换成 分
、秒
的结,会受转换成 2私分 0秒
; 125秒 则会落 2分开 5秒

声明差不多独时刻单位时public func in(_ components:
[Calendar.Component], of calendar: CalendarName? = nil) ->
[Calendar.Component : Int]
单个时间单位时public func in(_ component: Calendar.Component, of
calendar: CalendarName? = nil) -> Int?

参数
component
or components
: specify the component or an array of compone .extended
and pass true
or false
to set the alt format.

例子

let dateA = DateInRegion()

let dateB = dateA + 20.minutes + 120.seconds // create another date with
some diff
// Get difference in minutes
let diff_in_minutes = (dateB – dateA).in(.minute) // 22 minutes
// Get difference in seconds and minutes
let diff_in_min_and_secs = (dateB – dateA).in([.minute,.second])
// lower components are grouped. You will get .second=0, .minute=2
// This is another example
let another_diff: TimeInterval = 125 // 125 seconds
let diff_in_min_and_secs_2 = another_diff.in([.minute,.second])
// you will get .minute=2 and .second=5

落 iOS 样式的时光字符串
若得应用 Foundation
受到的流年格式来输出时间字符串。
声明func string(dateStyle: DateFormatter.Style = .medium, timeStyle:
DateFormatter.Style = .medium) -> String

参数
dateStyle
: the style used to print a date as DateFormatter.Style
. If not specified.medium
is used.

timeStyle
: the style used to print a time as DateFormatter.Style
. If not specified .medium
is used.

例子

let date = DateInRegion() // create a date from current time in local
device’s region and calendar

// Some examples of date as string formatted with different styles for
date and time
let example_1 = date.string(dateStyle: .medium, timeStyle: .long) //
Sep 29, 2015, 1:01:13 PM GMT+2
let example_2 = date.string(dateStyle: .short, timeStyle: .short) //
9/29/15, 1:00 PM
let example_3 = date.string(dateStyle: .long, timeStyle: .none) //
September 29, 2015

赢得人类可读或白话式时间字符串
公可行使 Foundation
起源定义日期 –
时间格式来输出时间字符串;同样的,时间距离也得使口语化字符串来抒发。
声明取得一个时刻以及今日时时的差值时func colloquialSinceNow() throws
-> (date: String, time: String?)
获取两单日子之内的差值时func colloquial(toDate date: DateInRegion)
throws -> (date: String, time: String?)
留神:该办法返回的凡一个日期与时光之元组。
异常比方个别独时刻使不同之日历,会丢来 .DifferentCalendar
异常;如果无法测算起片独日子的间距,会丢掉来 .FailedToCalculate
异常。
参数
date
: reference date for comparisor

例子

// Returned tuples (in EN):

// “past month” for interval, “Aug, 29 2016” for relevant time
let dateA = DateInRegion() – 1.months
let (colloquial,relevantTime) = try! dateA.colloquialSinceNow()

// Returned tuples (in EN):
// “2 hours ago” for interval, “at 11:28” for relevant time
let dateB = DateInRegion() – 2.hours – 14.minutes
let (colloquial,relevantTime) = try! dateB.colloquialSinceNow()

// Returned tuples (in EN):
// // “14 minutes ago” for interval, nil for relevant time
let dateC = DateInRegion() – 14.minutes
let (colloquial,relevantTime) = try! dateC.colloquialSinceNow()

// Returned tuples (in EN):
// “2012” for interval, “Sep 2012” for relevant time
let dateD = DateInRegion() – 4.years
let (colloquial,relevantTime) = try! dateD.colloquialSinceNow()

点名单位下,获取两单日子之内的间隔字符串
SwiftDate
可以以指定组件单位的前提下,获取两只时间之差值,并出口为字符串;你可装任意一个零部件的显示位置,比如(年使用
y
或years
来表达);组件所对应之绝深价值和极小值都见面于妥善处理,比如日月年这些单位太小值是
1,最大值是 12,而常转的极度大值是 60 ,最小值是 0。
声明 获取一个时跟现无时无刻的差值时func
timeComponentsSinceNow(options:,shared:) throws -> String
得到两只时刻内的差值时func timeComponents(to:options:shared:) throws
-> String

异常如未克计算起中的时空间隔,将会见丢来 .FailedToCalculate
错误。
参数
to
: reference date for comparisor

options
: struct ComponentsFormatterOptions which defines a list of options used
to print time components

例子

let region = Region.GMT()

let dateB = DateInRegion(absoluteDate: Date(), in: region)
let dateC = dateB – 2.years – 4.months – 5.days

let str2 = try! dateC.timeComponents(toDate: dateB, options:
ComponentsFormatterOptions(style: .positional)) // -2y 4m 0w 5d 0:00:00

let str3 = try! dateC.timeComponents(toDate: dateB, options:
ComponentsFormatterOptions(style: .full)) // -2 years, 4 months, 0
weeks, 5 days, 0 hours, 0 minutes, 0 seconds

let str4 = try! dateC.timeComponents(toDate: dateB, options:
ComponentsFormatterOptions(zero: .dropAll)) // -2y 4m 5d
let dateD = dateB + 1.months
let str5 = try! dateD.timeComponentsSinceNow(options:
ComponentsFormatterOptions(allowedUnits: [.weekOfMonth,.day], zero:
.dropAll)) // 4w 2d

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 亚洲必赢手机官网 版权所有