GrandTime–操作iOS的时间更简单

1281203-70862c0f222e4282

例行上图

有一个多月没有更新简书了,因为工作确实比较忙,天天加班。现在APP已经上线,是时侯继续我的写作之旅了。这次项目里面会进行大量的日期时间操作。比如获取某日期年月日,时分。两个日期的比较。设置某个日期的时间等操作。总之这次开发过程中不友好NSDate和其相关类的API让我感到不爽,感觉iOS原生的日期类非常不好用。于是我便萌生了自己写一个关于操作NSDate的类的想法,因以我以前是用C#,感觉C#的日期时间类比较优雅,我便参考它写了个iOS的DateTime,今天我便分享给大家。

iOS对日期和时间的操作的不足

NSDate是iOS表示日期时间的核心类。但是它也只能表示时间,如果需要格式化输出,需要使用到NSDateFormatter类,而如果需要取出里面的年月日和时分秒,则需要用到NSDateComponentsNSCalendar。相信每一位iOS开发者都会掌握这些类的使用,这里就不写示例代码了。虽然职责分离是一种好的设计,但是需要你大量对日期时间的比较,格式化输出等操作时,使用这些类来非常繁琐,要写很多的重复的代码,影响了开发效率。GrandTime正是解决这个问题而生的。

GrandTime组成

GrandTime由三个类组成:DateTime,TimeSpanGrandTimerDateTime是最核心的类,封装了NSDateNSDateComponents。把年月日时分秒的操作变得十分简单方便。而TimeSpan是一段时间间隔,相当于NSTimeInterval,同时还封装了很多功能。而GrandTimer是一个会自动停止的弱Timer,并且提供了Block来方便调用。下面我一个一个来介绍怎么使用。

DateTime

DateTime类封装了常见的日期时间操作。它提供了如下8个构造函数

111281203-57ad064788b4dac0

DateTime的构造函数

相信这8个构造函数可以满足绝大部分的使用场景。里面有两个需要说明一下,tick在里面是指毫秒,而timestampUnix时间戳。默认的无参构造函数和NSDate一样,都是使用当前时间。
下面看看代码

我为DateTime提供了操作符重载

DateTime也提供了一系列Add方法,可以对自身操作。改变自己的时间值。

121281203-ebadd457e4ee9e91

DateTime的Add系列方法

使用DateTime来获取日期时间的每个部分也是非常简单,同时也支持单独设值

最后就是格式化输出了,DateTime使用了一个单例的NSDateFormatter,这样可以防止不必要的频繁实例化NSDateFormatter。下面看看输出

DateTime的用法在上面的代码基本可以全部找到。更多的用法请参考原代码或者API。可见,使用DateTime还操作时间还是很方便的。

TimeSpan

同样,为了更好地使用时间间隔,我写了TimeSpan来专门处理时间间隔。TimeSpan类比较简单一点,下面直接上代码

TimeSpan的构造函数不多,也比较简单。里面最大的时间间隔单位是天这个单位。因为天可以一直累加,所以也足够用了。同样,使用from系列静态函数也可以自己想要的时间间隔,

131281203-1cd0ed87e11f940c

From系列静态函数

从图中可以看出,很多函数所传递的变量是Double类型的, 也就是说,可以给它传小数值。下面看看代码吧

可以单独取和设定某个属性

DateTime一样,重载了运算符号来实现TimeSpan之间也的加减操作,

OK, 上面就是DateTimeTimeSpan的各种用法,相信它们可以满足大部分项目的需求,如果不够,自己也可以写扩展来实现。

GrandTime还提供了一个计时器GrandTimer。和NSTimer不一样,GrandTimer不会强引用当前类。所以不会出现NSTimer那种只要不调用valifdate()方法就会在内存里一直运行这种情况。使用GrandTimer非常简单,直接使用其静态方法即可

GrandTimer也提供了一个selector版本,不过需要自己提供一个线程,这种用法用NSTimer很类似。

以上就是GrandTime的所有功能的展示的,我已经将这个项目加入了Cocoapods。 使用起来非常简单,直接pod‘GrandTime’就可以啦,如果你不想用Cocoapods,那么也可以将里面的文件直接拖到项目里面。Git地址:GrandTime。 如果你们喜欢的话,麻烦给个Star。

1 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部