此框架提供Ease of use的包装和Nsdate的类别。这个框架设计的关键因素是使用Nsdate的简单直观。
大部分日期算术的最小单位精度是一秒。
使用比较运算符直观地比较日期
let d1 = //Some date
let d2 = //Some other date
if d1 == d2 {}
if d1 != d2 {}
if d1 <= d2 {}
if d1 >= d2 {}
if d1 < d2 {}
if d1 > d2 {}
您可以使用加号或减号来分别添加或减去时间间隔。结果是新的日期。
let d1 = //Some date
let oneHour = 60.0 * 60.0
let d2 = d1 + oneHour
let d3 = d1 + 20.0
let d4 = d1 - oneHour
let d5 = d1 - 115.5
您还可以使用+将NsdateComponents添加。同样,结果是新的日期。
let d1 = //Some date
let comps = //Some date components
let d2 = d1 + comps
通过设置组件中的负值,可以完成减去组件。
您还可以通过使用减号从其它日期中减去一个Nsdate。结果是NSDateComponent
let d1 = //Some date
let d2 = //Some other date
let diffComps = d1 - d2
在我看来,添加日期并没有太大意义。
在这个框架中,我创建了一个概念,可以将时间周期添加到或从Nsdate对象中减去。以下是这个框架中预定义的时间周期:
Second
Minute
Hour
Day
Week
Month
Year
您可以使用这些时间周期进行日期算术
let date = //Some date
let afterASecond = date + Second()
let after20Seconds = date + Second(20)
let befor15Seconds = date - Second(15)
let after2Hours = date + Hour(2)
let beforeADay = date - Day()
let after4Weeks = date + Week(4)
let before2Years = date - Year(2)
let before2Weeks3daysAnd5Hours = date - Week(2) - Day(3) - Hour(5)
计算基于系统的当前日历。
关于添加或减去月份和年份的注意:添加一个月将增加日期的月份部分一个,如果月份是十二月,它将增加年份一个并将月份设为一月。同样适用于年份。
let d1 = \\Feb 19 2015, 13:30:30
let d2 = \\Mar 21 2015, 13:30:30
let res1 = d1 + Month() \\Mar 19 2015, 13:30:30 (adding 28 days)
let res2 = d2 + Month() \\Apr 21 2015, 13:30:30 (adding 31 days)
您还可以为日期算术定义自己的自定义时间周期。例如,两周或45分钟的讲座持续时间等。
public class Lecture: TimePeriodBase {
let lectureMinutes = 45.0
public class override var INTERVAL: NSTimeInterval {
return Minute.INTERVAL * Lecture().lectureMinutes
}
public override var interval: NSTimeInterval {
return Lecture.INTERVAL * Double(count)
}
public override var component: NSDateComponents {
var component = NSDateComponents()
component.minute = Int(Double(count) * lectureMinutes)
return component
}
public override var negativeComponent: NSDateComponents {
var component = NSDateComponents()
component.minute = -Int(Double(count) * lectureMinutes)
return component
}
}
let numLecturesInFirtHalf = 4
let firstLectureStarts = \\Some time
let secondLectureStarts = firstLectureStarts + Lecture()
...
let lastLectureStarts = firstLectureStarts + Lecture(numLectureInFirstHalf)
您也可以创建涉及多个日期组件的复杂持续时间。
使用计算属性访问日期组件。这些基于系统的当前日历。
let date = \\Mar 21 2015, 13:30:49
let second = date.second \\ 49
let minute = date.minute \\ 30
let hour = date.hour \\ 13
let day = date.day \\ 21
let weekDay = date.weekDay \\ 7 Sat
let month = date.month \\ 3
let year = date.year \\ 2015
let weekOfMonth = date.weekOfMonth \\ 3 - 3rd week
以下是一些创建基本日期的实用方法。
//Suppose it is right now Mar 21 2015, 13:30:49
let now = NSDate.now() \\Mar 21 2015, 13:30:49
let today = NSDate.today() \\Mar 21 2015, 00:00:00 - Start of today
let yesterday = NSDate.yesterday() \\Mar 20 2015, 00:00:00 - Start of yesterday
let tomorrow = NSDate.tomorrow() \\Mar 22 2015, 00:00:00 - Start of tomorrow
let dby = NSDate.dayBeforeYesterday() \\Mar 19 2015, 00:00:00
let dat = NSDate.dayAfterTomorrow() \\Mar 23 2015, 00:00:00
let thisMinute = NSDate.thisMinute() \\Mar 21 2015, 13:30:00 - Start of this minute
let thisHour = NSDate.thisHour() \\Mar 21 2015, 13:00:00 - Start of this hour
let thisWeek = NSDate.thisWeek() \\Mar 15 2015, 00:00:00 - Start of this week
let thisMonth = NSDate.thisMonth() \\Mar 1 2015, 00:00:00 - Start of this month
let thisYear = NSDate.thisYear() \\Jan 1 2015, 00:00:00 - Start of this year
以下方法提供了指定日期的开始和结束时间。
let date = //Mar 21 2015, 13:30:49
let startOfMinute = date.startOfMinute() //Mar 21 2015, 13:30:00
let endOfMinute = date.endOfMinute() //Mar 21 2015, 13:30:59
let startOfHour = date.startOfHour() //Mar 21 2015, 13:00:00
let endOfHour = date.endOfHour() //Mar 21 2015, 13:59:59
let startOfDay = date.startOfDay() //Mar 21 2015, 00:00:00
let endOfDay = date.endOfDay() //Mar 21 2015, 23:59:59
let startOfWeek = date.startOfWeek() //Mar 15 2015, 00:00:00
let endOfWeek = date.endOfWeek() //Mar 21 2015, 23:59:59
let startOfMonth = date.startOfMonth() //Mar 01 2015, 00:00:00
let endOfMonth = date.endOfMonth() //Mar 31 2015, 23:59:59
let startOfYear = date.startOfYear() //Jan 01 2015, 00:00:00
let endOfYear = date.endOfYear() //Dec 31 2015, 23:59:59
以下方法提供了指定日期的下一个月和上一个月的日期。
let date = //Mar 21 2015, 13:30:49
let nextMinute = date.nextfMinute() //Mar 21 2015, 13:31:00
let previousMinute = date.previousMinute() //Mar 21 2015, 13:29:00
let nextHour = date.nextHour() //Mar 21 2015, 14:00:00
let previousHour = date.previousHour() //Mar 21 2015, 12:00:00
let nextDay = date.nextfDay() //Mar 22 2015, 00:00:00
let previousDay = date.previousDay() //Mar 20 2015, 00:00:00
let nextWeek = date.nextWeek() //Mar 22 2015, 00:00:00
let previousWeek = date.previousWeek() //Mar 08 2015, 00:00:00
let nextMonth = date.nextMonth() //Apr 01 2015, 00:00:00
let previousMonth = date.previousMonth() //Feb 01 2015, 00:00:00
let nextYear = date.nextYear() //Jan 01 2016, 00:00:00
let previousYear = date.previousYear() //Jan 01 2014, 00:00:00
所有与日期相关的计算都使用系统默认日历,即NSCalendar.currentCalendar()。如果您想使用其他日历,可以通过以下方式实现:
NSCalendar.defaultCalendar = Some new calendar instance here
现在项目已成为您工作空间的一部分。您需要在目标部分将其引用添加到主项目。
MIT许可证(MIT)
版权所有 © 2015 abdullah-chhatra
特此授予获取此软件及其相关文档文件(以下简称“软件”)副本的任何个人免费使用软件的权利,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并准许向软件提供的人士行使其中的任何权利,前提是遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于对适销性、适用于特定目的和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担任何责任,无论此责任基于合同、侵权或其他原因,是否源于、出于或与软件或其使用或其他交易有关。