DateTools,可能是无比好用的iOS日期工具库

■ 东方明珠电视塔,上海浦东,2010年

www.188bet .com 1

二百六十三米高之观光厅外,下着南方初夏有意的淅沥小雨,天空雾蒙蒙灰扑扑一切片,就如多年无人招呼,落满尘土的印象画作的背景。

种简介

DateTools 用于加强Objective-C中日期与岁月相关操作的频率.灵感来源于
DateTime.aspx)和Time
Period
Library.

  • 型主页: DateTools
  • 最新示例:
    点击下载
  • 工简议: 支持国际化,支持中文输出,真的十分密切!

<1>申城:静水流深

安装

这般糟糕之气象,很少有人愿意花钱跑来此旅游,即使是以当下挤的世博会期间。很少有人,但终归有,只是少数。世上总在有兼有另类活法的人,比如说我。这样说,并非自己炫耀有多与众不同、多么另类清高。我爱不释手当这么的随时来此,只为喜好这样在于朦朦胧胧的空中,不必分清东南西北,只略知一二自己去地八百六十二英尺。当然,今天本人来此处,还别发因。

使用 Cocoapods 安装

pod 'DateTools'

自电梯下,在观光厅绕了同等环抱,发现除了自己,还有一个有些旅行团。十来单花白头发的前辈随即,一位长着娃娃脸的导游。老人们眯起眼望在窗户外,可此时的窗外,是混淆一片啊呢看不清楚的。我懂得,旅行团都是一度定好了路程,这多老人也是没法。

NSDate+DateTools

DateTools让NSDate功能又完整,可以给您重新易于地失去取得日期各个零部件的信息,如年
月 日等.

确实愿意这个时节来此的,恐怕就惟有她了。一米七横之高挑身材,上正轻描淡写蓝色长袖衬衣,下着来硌褪色的青青牛仔裤,脚穿灰黑色旅游鞋,左肩挂一个米黄色挎包。她挺地站于观光厅的玻璃前,头发直直地起两侧以及心血后直传下来,盖住了耳朵。

得到字符串形式的日间隔.

DateTools
可以给你获取距离一个千古底时空点离时时间的字符串表示.和Twitter中很像,这个日子字符串有整体形式和缩略形式简单种植.你得像下这样使:

NSDate *timeAgoDate = [NSDate dateWithTimeIntervalSinceNow:-4];
NSLog(@"Time Ago: %@", timeAgoDate.timeAgoSinceNow);
NSLog(@"Time Ago: %@", timeAgoDate.shortTimeAgoSinceNow);

//输出:
//Time Ago: 4 seconds ago
//Time Ago: 4s

// 如果工程支持国际化,并且模拟器或真机环境设为简体中文,则会输出:
// Time Ago: 4秒钟前
// Time Ago: 4秒

设您的工程支撑国际化,DateTools兹会自动支持以下语言的本地化:

  • ar (Arabic)
  • bg (Bulgarian)
  • ca (Catalan)
  • zh_Hans (简体中文)
  • zh_Hant (繁体中文)
  • cs (Czech)
  • da (Danish)
  • nl (Dutch)
  • en (English)
  • fi (Finnish)
  • fr (French)
  • de (German)
  • gre (Greek)
  • gu (Gujarati)
  • he (Hebrew)
  • hi (Hindi)
  • hu (Hungarian)
  • is (Icelandic)
  • id (Indonesian)
  • it (Italian)
  • ja (Japanese)
  • ko (Korean)
  • lv (Latvian)
  • ms (Malay)
  • nb (Norwegian)
  • pl (Polish)
  • pt (Portuguese)
  • ro (Romanian)
  • ru (Russian)
  • sl (Slovenian)
  • es (Spanish)
  • sv (Swedish)
  • th (Thai)
  • tr (Turkish)
  • uk (Ukrainian)
  • vi (Vietnamese)
  • cy (Welsh)
  • hr (Croatian)

它们一动不动,像相同起行为艺术品,极其小心地往在窗外远处的灰暗一片。很少见出像其这一来望法的人数。一般人还见面玩时的黄浦江,或者江对岸的外滩,或者远处人潮涌动的世博园区(天气好的时刻),谁会看在那不行远很远的地方呢?那里只是发生同切开虚空。

抱日期的有组成部分,如年月星期常常转等.

以 DateTools 可以老容易地得到日期对象的某一样片段:

NSDate * date = [NSDate date];
NSInteger year = date.year;
NSInteger month = date.month;
NSLog(@"year: %ld, month: %ld", (long)year, (long)month); // year: 2015, month: 9

而您免思采取公历,可以这么做:

NSInteger day = [date dayWithCalendar:calendar];

使您想改 DateTools 使用的默认日历,可以改写 NSDate+DateTools.m 中的
defaultCalendar 方法.

从今侧看去,她是一个美貌的女孩,但未是那种走在旅途擦肩而过之后,还见面为行人回过头来再看,以致撞上汽车屁股的档次。怎么说呢,就是不那么惊艳,但更为看越觉得美,越看更觉得有味道。她底神采和作为,以自身的直觉判断,这是一个孤零零的女孩,好似一棵孤独的水仙开于树丛奥,从没受人点了。

日子编辑

好采用 dateByAdding...dateBySubtractingYears...
进行日期按年/月/日/时分/秒等充实或者减少:

NSDate * date = [NSDate date];
NSInteger oldYear = date.year;

NSDate *newDate = [date dateByAddingYears:1];
NSInteger newYear = newDate.year;

NSLog(@"oldYear: %ld newYear: %ld", (long)oldYear, (long)newYear); // 输出: oldYear: 2015 newYear: 2016

几分钟后,老人等同样面子失望,怏怏不快地撤出。偌大一个观光厅里,除了几个正缩在椅里打盹的卖纪念品的工作人员,就单单剩下我跟其。

日期比

DateTools 提供下列方法,比较少单日子的大小,返回结果为一个布尔值:

  • isEarlierThan
  • isEarlierThanOrEqualTo
  • isLaterThan
  • isLaterThanOrEqualTo

假定想抱两单日子具体的差值: 获取毫秒间隔可使 NSDate 提供的
timeIntervalSinceDate:timeIntervalSinceNow
方法;获取相差多少年/月/周/日/时/分/秒等,可以一直利用
DateTools的扩展方法.

NSInteger yearsApart = [firstDate yearsFrom:secondDate];

类似yearsFrom:用以日期比的章程包括:

  • yearsFrom:, yearsUntil, yearsAgo, yearsEarlierThan:,
    yearsLaterThan:
  • monthsFrom:, monthsUntil, monthsAgo, monthsEarlierThan:,
    monthsLaterThan:
  • weeksFrom:, weeksUntil, weeksAgo, weeksEarlierThan:,
    weeksLaterThan:
  • daysFrom:, daysUntil, daysAgo, daysEarlierThan:,
    daysLaterThan:
  • hoursFrom:, hoursUntil, hoursAgo, hoursEarlierThan:,
    hoursLaterThan:
  • minutesFrom:, minutesUntil, minutesAgo, minutesEarlierThan:,
    minutesLaterThan:
  • secondsFrom:, secondsUntil, secondsAgo, secondsEarlierThan:,
    secondsLaterThan:

其或那样安静地站方,望在惺忪虚空的界限,如果那里有度的话语。她那样执着,似乎想打那朦胧的底限里,找寻到那么丢失已老之名贵的哟。从其站立的职判断,她于在的方向应该是洲的西北方。

日子的格式化输出

得动用 code>formattedDateWithStyle: 和 formattedDateWithFormat:
方法格式化输出日期:

NSDate * date = [NSDate date];
NSString * dateStr = [date formattedDateWithStyle: NSDateFormatterFullStyle];

// 此处输出的具体内容会根据你的手机或模拟器语言环境的不同而不同.
NSLog(@"%@", dateStr); // 输出: 2015年9月25日 星期五

dateStr =  [date formattedDateWithFormat:@"YYYY/MM/dd HH:mm:ss"];
NSLog(@"%@", dateStr); // 输出: 2015/09/25 15:19:23

十分钟后,她算是动了,轻轻缩了瞬间肩,然后转身向电梯口走去。仿佛它来此的目的,就是为完成刚才的怪注目礼似的。

时间段

DateTools 通过 DTTimePeriod类来简化时间段有关的操作.

于自身边走过时,我发觉她底眼有些发红。她从未扣本身一样肉眼,好像连准备看自己一眼的觉察还无。我之社会风气与她无关。

初始化

早已知晓开始跟竣工时,可以运用下的不二法门初始化时间段对象:

DTTimePeriod *timePeriod = [[DTTimePeriod alloc] initWithStartDate:startDate endDate:endDate];

或者,已清楚起始或结时间,同时了解时间段的到底时长,可以据此类似下面的主意创建时间端对象:

// 创建一个时间段,从现在开始,共5个小时.
DTTimePeriod *timePeriod = [DTTimePeriod timePeriodWithSize:DTTimePeriodSizeHour amount:5 startingAt:[NSDate date]];

我就她动上前电梯。我绝不那种看漂亮女孩子就流出哈喇子,并像花痴一样赶在想多看几乎目的人,只是今天即令光剩余自己及它简单只,我未思麻烦电梯服务员吗我们片独人初步两不好电梯,何况自己吗欠下去了。当然,同样另发因,暂且不提。她的世界以及自我有关。

光阴段信息

好透过 DTTimePeriod 的实例方法来获取时间段的相关信息:

  • hasStartDate – 返回YES,如果发生开始时间.
  • hasEndDate – 返回YES,如果产生收尾时间.
  • isMoment – 返回YES,如果起始时间以及竣工时相同.
  • durationIn.... – 返回指定单位下日段的长度.

DTTimePeriod *timePeriod = [[DTTimePeriod alloc] initWithStartDate:date endDate: [date dateByAddingDays: 10]];

NSLog(@"相差 %g 天", [timePeriod durationInDays]); // 输出: 相差 10 天

电梯里虽自己、她、电梯服务员三只人口,我们三人数呈正三角形站立。她站于无比中间,左手紧紧拽住挎包带,眼睛直直盯在电梯门缝,表情严肃得如过于郑重其事,仿佛那门缝里,正藏在某个事关人类生死存亡的严重性命题似的。

操作

可以针对时间段进行移动,延长或缩水的操作.

移动

当一个时光段为移位时,起始时间和结束时间会见相应地同步搬迁或推后.可以下下两个点子移动时段:

  • shiftEarlierWithSize:amount: 时间段整体前更换
  • shiftLaterWithSize:amount: 时间段整体推后

延长/缩短

好经保持打始点/中间时间点/结束时间接触未转移,然后改成始于或收尾时间点,以获延伸或缩短时间段的目的:

// 通过前移起始时间,把时间段总时长从1分钟变为2分钟.
DTTimePeriod *timePeriod  = [DTTimePeriod timePeriodWithSize:DTTimePeriodSizeMinute endingAt:[NSDate date]];
[timePeriod lengthenWithAnchorDate:DTTimePeriodAnchorEnd size:DTTimePeriodSizeMinute amount:1];

电梯服务员面带微笑,用双语对咱们轮换说了相同所有“欢迎参观并期望下次再次来”之类的言辞,刚说罢“See
you next time”,电梯稳稳停住。

关系

得动用
DTTimePeriod的关联操作相关的方式,来判断两只时间段的相互关系,如是否带有,是否是与一段时间等.

基础

下图表格列出了少只时刻段有可能的关系:
www.188bet .com 2

然经过下列方式判断两单时刻段的干:

  • isEqualToPeriod:
  • isInside:
  • contains:
  • overlapsWith:
  • intersects:

公可以由此下这个方法赢得相对于任何一个年华段的关系:

-(DTTimePeriodRelation)relationToPeriod:(DTTimePeriod *)period;

富有可能的时段间的干还排在了枚举 DTTimePeriodRelation 中了.

点击示例中 Time Periods
按钮,然后滑动滑块,可以重复好地掌握时间段中间的相互关系

www.188bet .com 3

电梯门打开,女孩一直朝着大厅出口走去。出了大厅,在地铁二如泣如诉线进口附近,她前进了公共厕所。

时刻段集合

DateTools 提供零星种时光段集合类: DTTimePeriodCollection
DTTimePeriodChain.前者,允许存储彼此产生搅和的辰段;后者,不同意存储彼此产生交集的时间段.

这有限只日子段集合类,操作及 NSArray 很像.你得添加,插入和移除
DTTimePeriod
对象,就像而于数组时的那样.唯一的不比是,两受到聚集存储时段的方式.

DTTimePeriodCollection
DTTimePeriodChain,是以简化基于多独时间段的逻辑处理.比如同一团队中,给不同的口设置任务之开局与收时间,此时设使用
DTTimePeriodCollection
来处理各个时间段,可以直接获取团队总任务之起始时间及了结时间.

自我在相距公厕二十米之同一蔸老槐树下掏出记录本,记下:09:40前行东方明珠。10:10下。10:15上前地铁二号线入口旁的公共厕所。

DTTimePeriodCollection

DTTimePeriodCollection
是一个条条框框相对宽松的集合.默认无序(指的凡逐一与一一时间段的起止时间无关.),但支持手动排序;拥有和谐的习性,比如根据内稍存储的光阴段计算出的斯聚众的开头日跟终结时间.这个组成允许存储有交集的年月段.

www.188bet .com 4

可以像下这样创建新的DTTimePeriodCollection集合:

// 创建集合.
DTTimePeriodCollection *collection = [DTTimePeriodCollection collection];

// 创建时间段
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat: @"YYYY MM dd HH:mm:ss.SSS"];
DTTimePeriod *firstPeriod = [DTTimePeriod timePeriodWithStartDate:[dateFormatter dateFromString:@"2014 11 05 18:15:12.000"] endDate:[dateFormatter dateFromString:@"2015 11 05 18:15:12.000"]];
DTTimePeriod *secondPeriod = [DTTimePeriod timePeriodWithStartDate:[dateFormatter dateFromString:@"2015 11 05 18:15:12.000"] endDate:[dateFormatter dateFromString:@"2016 11 05 18:15:12.000"]];

// 把时间段添加到集合中.
[collection addTimePeriod:firstPeriod];
[collection addTimePeriod:secondPeriod];

// 从集合中获取时间段.
firstPeriod = collection[0];

排序

发生三类给集合内时间段排序的不二法门:

  • 冲起始时间排序sortByStartAscending,
    sortByStartDescending
  • 据悉截止时间排序sortByEndAscending, sortByEndDescending
  • 根据时长排序sortByDurationAscending,
    sortByDurationDescending

操作

为得错过得到一个 NSDate 对象或一个 DTTimePeriod 对象以及一个
时间段结合的对立关系.例如,你可以经过 periodsIntersectedByDate:
方法赢得具有与某时间来交集的流年段.这个方法会返回一个初的
DTTimePeriodCollection 对象,里面含有有符合条件的日段.

有过多近似的艺术,如下图:

www.188bet .com 5

八分钟了后,还尚未呈现其出来。我找到附近一个“小白菜”(世博会的志愿者),向它们摇曳了平等眼我的工作证。一分钟后,“小白菜”从洗手间出来告诉自己,里面没自所描述的那位女孩。

DTTimePeriodChain

DTTimePeriodChain 因较严格的不二法门囤时段对象.
DTTimePeriodChain集合通常根据开始同了结时间存储时段对象,并且产生和好之习性,如
根据其中存储的工夫段对象推断出来的是汇聚的起来日以及得了时间.
DTTimePeriodChain
内部存储的光阴段对象不允许发生到集.这种集好适用于连会议或者约会等日程类事务之打模.

www.188bet .com 6

创造一个新的 DTTimePeriodChain 集合:

// 创建集合.
DTTimePeriodChain *chain = [DTTimePeriodChain chain];

// 创建时间段
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat: @"YYYY MM dd HH:mm:ss.SSS"];

DTTimePeriod *firstPeriod = [DTTimePeriod timePeriodWithStartDate:[dateFormatter dateFromString:@"2014 11 05 18:15:12.000"] endDate:[dateFormatter dateFromString:@"2015 11 05 18:15:12.000"]];
DTTimePeriod *secondPeriod = [DTTimePeriod timePeriodWithStartDate:[dateFormatter dateFromString:@"2015 11 05 18:15:12.000"] endDate:[dateFormatter dateFromString:@"2016 11 05 18:15:12.000"]];

// 添加时间段对象到集合中.
[chain addTimePeriod:firstPeriod];

// 如果后存入的时间和前一个存入的时间无法前后完全衔接,则后一个时间会适当前移或后移,以使前后时间段紧凑.
[chain addTimePeriod:secondPeriod];

// 获取集合中的元素.
firstPeriod = chain[0];

初加盟的辰段,时长不转换,起始时间成为前一个日段的完结时间,结束时间对应前移后晚移.在非零位置新栽的工夫,其后的日子段相应后移.在零位置插入的光阴,集合的苗子时间前移.操作图解如下:

操作
比如 DTTimePeriodCollection 一样, DTTimePeriodChain
也可以展开相等性比较,并且也得以前移后后移.其他执行的措施以产图列有:

www.188bet .com 7

“厕所有后门吗?”我咨询。

“有只稍宗派。”她答应。

莫非女孩发现吃钉了?不可能。那何须走后门?

靶丢失。世博会中的上海街头巷尾拥堵,也未可能重新找到其。我只得坐直达第二号线,返回蓝天小区。

于小区前面的停车棚里,我找到那辆半新不旧的小宝马摩托,驶回我的住处。一年前我不怕从店铺给自家安排的公宿舍搬了出来了。我不太爱让集体生活。

返住处,我喝下零星罐冰镇啤酒。除了寒冷透骨,没有其它其它感觉。打开电视机,正在播整点新闻,全是百花齐放的世博会画面。我关了电视机。真实的社会风气,他们世世代代不得而知。当然,这并无是说画面及之就算未实。就像静水深流一样,表面上之静水,也是诚心诚意的静水。但我弗属静水,我曾下沉到了极底部。

仰面躺在床上,天花板上大像谷姐裸体一样的影仍在那里,若隐若现。

看在是“裸体”的影,我回忆那个起洗手间后门逃走的女孩。她或吧与自同一,沉到了静水的底。或许,比自己没得还要充分,还要多。她是孤独的。

于此间,我耶一致孤独。

……

▶未完待续,本文选自:《特情局诡案录:读骨奇谭》

推荐

[作者]海豚先生 [出版社]山东文艺出版社

前面国安调查员揭秘惊心动魄的非凡事件

©内容简介:如出一辙项奇怪案件牵来的国家机密;一粒亡者头骨透发底触目惊心消息。地球文明的大迷团即将解开,谁能够拦截一集市人类浩劫的演出?国防机密!特别调查!超自然现象!人类大灾难!

◆本书作者名校国际涉专业毕业后入伍,后为国家安全部门服务了一段时间。就和好清楚的一些资料,加以加工演化,遂成是开。

◆一部真正敢于讲述中国间谍调查人员故事之小说。一个出于日常案件指向的全都人类大灾难。

©作者简介:海豚先生,男,80后,国际关系专业本科毕业,有了频年军事生涯,已经效力于上海某国安背景的查公司,经历多项不足为外人道的波,终融入到也虚亦实的小说内容里。曾为橄榄、林海豚等笔名,发表短篇小说、杂文若干首。出版长篇小说两统——《隐形人》《这个特务不冷血》,村达到春树的责任编辑为其书面写推荐语,《朝日新闻》的记者采访时时,称该也华的村落达到春树

Leave a Comment.