Nsdate的各种常用操作
//
// NVDate.h
//
// Created by Noval Agung Prayogo on 2/5/14.
// Copyright (c) 2014 Noval Agung Prayogo. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef NS_OPTIONS(NSUInteger, NVDayUnit) {
NVDayUnitSunday = 1,
NVDayUnitMonday = 2,
NVDayUnitTuesday = 3,
NVDayUnitWednesday = 4,
NVDayUnitThursday = 5,
NVDayUnitFriday = 6,
NVDayUnitSaturday = 7
};
typedef NS_OPTIONS(NSUInteger, NVMonthUnit) {
NVMonthUnitJanuary = 1,
NVMonthUnitFebruary = 2,
NVMonthUnitMarch = 3,
NVMonthUnitApril = 4,
NVMonthUnitMay = 5,
NVMonthUnitJune = 6,
NVMonthUnitJuly = 7,
NVMonthUnitAugust = 8,
NVMonthUnitSeptember = 9,
NVMonthUnitOctober = 10,
NVMonthUnitNovember = 11,
NVMonthUnitDecember = 12,
};
@interface NVDate : NSObject
- (id)initUsingToday;
- (id)initUsingDate:(NSDate *)date;
- (id)initUsingYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day;
- (id)initUsingYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second;
- (id)initUsingString:(NSString *)stringDate;
- (id)initUsingString:(NSString *)stringDate withFormat:(NSString *)dateFormat;
- (id)initUsingSeconds:(NSInteger)seconds;
- (NSDate *)date;
- (NSString *)stringValue;
- (NSString *)stringValueWithFormat:(NSString *)dateFormat;
- (void)zeroTime;
- (instancetype)previousDay;
- (instancetype)previousDays:(NSInteger)days;
- (instancetype)nextDay;
- (instancetype)nextDays:(NSInteger)days;
- (instancetype)previousWeek;
- (instancetype)previousWeeks:(NSInteger)weeks;
- (instancetype)nextWeek;
- (instancetype)nextWeeks:(NSInteger)weeks;
- (instancetype)previousMonth;
- (instancetype)previousMonths:(NSInteger)months;
- (instancetype)nextMonth;
- (instancetype)nextMonths:(NSInteger)months;
- (instancetype)previousYear;
- (instancetype)previousYears:(NSInteger)years;
- (instancetype)nextYear;
- (instancetype)nextYears:(NSInteger)years;
- (instancetype)firstDayOfMonth;
- (instancetype)lastDayOfMonth;
- (instancetype)firstMonthOfYear;
- (instancetype)lastMonthOfYear;
- (instancetype)previousDayOfDayName:(NVDayUnit)dayUnit;
- (instancetype)nextDayOfDayName:(NVDayUnit)dayUnit;
- (BOOL)isCurrentDayName:(NVDayUnit)dayUnit;
- (BOOL)isCurrentMonthName:(NVMonthUnit)monthUnit;
@property NSString *dateFormatUsingString;
@property NSDateFormatterStyle dateFormatUsingStyle;
@property NSDateFormatterStyle timeFormatUsingStyle;
@property NSInteger year;
@property NSInteger month;
@property (readonly) NSInteger week;
@property NSInteger day;
@property NSInteger hour;
@property NSInteger minute;
@property NSInteger second;
@end
//
// NVDate.m
//
// Created by Noval Agung Prayogo on 2/5/14.
// Copyright (c) 2014 Noval Agung Prayogo. All rights reserved.
//
#import "NVDate.h"
@implementation NVDate {
NSDateFormatter *_dateFormatter;
NSCalendar *_calendar;
NSDate *_date;
NSCalendarUnit _dateTimeCalendarUnit;
}
- (id)init {
if (self = [super init]) {
_dateFormatter = [[NSDateFormatter alloc] init];
_dateFormatter.dateStyle = NSDateFormatterFullStyle;
_dateFormatter.timeStyle = NSDateFormatterFullStyle;
_calendar = [NSCalendar currentCalendar];
_date = [[NSDate alloc] init];
_dateTimeCalendarUnit = (NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit);
}
returnself;
}
- (id)initUsingToday {
if (self = [self init]) {
_date = [NSDate date];
}
returnself;
}
- (id)initUsingString:(NSString *)stringDate {
if (self = [self init]) {
_date = [_dateFormatter dateFromString:stringDate];
}
returnself;
}
- (id)initUsingString:(NSString *)stringDate withFormat:(NSString *)dateFormat {
if (self = [self init]) {
_dateFormatter.dateFormat = dateFormat;
_date = [_dateFormatter dateFromString:stringDate];
}
returnself;
}
- (id)initUsingYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day {
if (self = [self init]) {
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.year = year;
dateComponents.month = month;
dateComponents.day = day;
_date = [_calendar dateFromComponents:dateComponents];
}
returnself;
}
- (id)initUsingYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second {
if (self = [self init]) {
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.year = year;
dateComponents.month = month;
dateComponents.day = day;
dateComponents.hour = hour;
dateComponents.minute = minute;
dateComponents.second = second;
_date = [_calendar dateFromComponents:dateComponents];
}
returnself;
}
- (id)initUsingDate:(NSDate *)date {
if (self = [self init]) {
_date = date;
}
returnself;
}
- (id)initUsingSeconds:(NSInteger)seconds {
if (self = [self init]) {
_date = [NSDate dateWithTimeIntervalSinceReferenceDate:seconds];
}
returnself;
}
- (NSDate *)date {
return _date;
}
- (NSString *)stringValue {
return [_dateFormatter stringFromDate:_date];
}
- (NSString *)stringValueWithFormat:(NSString *)dateFormat {
NSDateFormatter *localDateFormatter = [_dateFormatter copy];
localDateFormatter.dateFormat = dateFormat;
return [localDateFormatter stringFromDate:_date];
}
- (void)zeroTime {
NSDateComponents *dateComponents = [_calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:_date];
dateComponents.hour = 0;
dateComponents.minute = 0;
dateComponents.second = 0;
_date = [_calendar dateFromComponents:dateComponents];
}
- (void)setDateFormatUsingString:(NSString *)dateFormatUsingString {
_dateFormatter.dateFormat = dateFormatUsingString;
}
- (NSString *)dateFormatUsingString {
return _dateFormatter.dateFormat;
}
- (void)setDateFormatUsingStyle:(NSDateFormatterStyle)dateFormatUsingStyle {
_dateFormatter.dateStyle = dateFormatUsingStyle;
}
- (NSDateFormatterStyle)dateFormatUsingStyle {
return _dateFormatter.dateStyle;
}
- (void)setTimeFormatUsingStyle:(NSDateFormatterStyle)timeFormatUsingStyle {
_dateFormatter.timeStyle = timeFormatUsingStyle;
}
- (NSDateFormatterStyle)timeFormatUsingStyle {
return _dateFormatter.timeStyle;
}
- (instancetype)daysCalculate:(NSInteger)days isForward:(BOOL)isForward {
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = days * (isForward ? 1 : -1);
_date = [_calendar dateByAddingComponents:dateComponents toDate:_date options:0];
returnself;
}
- (instancetype)previousDay {
return [self previousDays:1];
}
- (instancetype)previousDays:(NSInteger)days {
return [self daysCalculate:days isForward:NO];
}
- (instancetype)nextDay {
return [self nextDays:1];
}
- (instancetype)nextDays:(NSInteger)days {
return [self daysCalculate:days isForward:YES];
}
- (instancetype)weeksCalculate:(NSInteger)weeks isForward:(BOOL)isForward {
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = (7 * weeks) * (isForward ? 1 : -1);
_date = [_calendar dateByAddingComponents:dateComponents toDate:_date options:0];
returnself;
}
- (instancetype)previousWeek {
return [self previousWeeks:1];
}
- (instancetype)previousWeeks:(NSInteger)weeks {
return [self weeksCalculate:weeks isForward:NO];
}
- (instancetype)nextWeek {
return [self nextWeeks:1];
}
- (instancetype)nextWeeks:(NSInteger)weeks {
return [self weeksCalculate:weeks isForward:YES];
}
- (instancetype)monthsCalculate:(NSInteger)months isForward:(BOOL)isForward {
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.month = months * (isForward ? 1 : -1);
_date = [_calendar dateByAddingComponents:dateComponents toDate:_date options:0];
returnself;
}
- (instancetype)previousMonth {
return [self previousMonths:1];
}
- (instancetype)previousMonths:(NSInteger)months {
return [self monthsCalculate:months isForward:NO];
}
- (instancetype)nextMonth {
return [self nextMonths:1];
}
- (instancetype)nextMonths:(NSInteger)months {
return [self monthsCalculate:months isForward:YES];
}
- (instancetype)yearsCalculate:(NSInteger)years isForward:(BOOL)isForward {
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.year = years * (isForward ? 1 : -1);
_date = [_calendar dateByAddingComponents:dateComponents toDate:_date options:0];
returnself;
}
- (instancetype)previousYear {
return [self previousYears:1];
}
- (instancetype)previousYears:(NSInteger)years {
return [self yearsCalculate:years isForward:NO];
}
- (instancetype)nextYear {
return [self nextYears:1];
}
- (instancetype)nextYears:(NSInteger)years {
return [self yearsCalculate:years isForward:YES];
}
- (instancetype)firstDayOfMonth {
NSDateComponents *dateComponents = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
dateComponents.day = 1;
_date = [_calendar dateFromComponents:dateComponents];
returnself;
}
- (instancetype)lastDayOfMonth {
NSDateComponents *dateComponents;
NSDate *date;
dateComponents = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
dateComponents.day = 1;
date = [_calendar dateFromComponents:dateComponents];
dateComponents = [[NSDateComponents alloc] init];
dateComponents.month = 1;
date = [_calendar dateByAddingComponents:dateComponents toDate:date options:0];
dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = -1;
_date = [_calendar dateByAddingComponents:dateComponents toDate:date options:0];
returnself;
}
- (instancetype)firstMonthOfYear {
NSDateComponents *dateComponents = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
dateComponents.month = NVMonthUnitJanuary;
_date = [_calendar dateFromComponents:dateComponents];
returnself;
}
- (instancetype)lastMonthOfYear {
NSDateComponents *dateComponents = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
dateComponents.month = NVMonthUnitDecember;
_date = [_calendar dateFromComponents:dateComponents];
returnself;
}
- (instancetype)previousDayOfDayName:(NVDayUnit)dayUnit {
int currentWeekDay = [_calendar components:_dateTimeCalendarUnit fromDate:_date].weekday;
if (currentWeekDay == dayUnit)
return [self previousWeek];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
if (currentWeekDay > dayUnit)
dateComponents.day = -(currentWeekDay - dayUnit);
else
dateComponents.day = -currentWeekDay - (7 - dayUnit);
_date = [_calendar dateByAddingComponents:dateComponents toDate:_date options:0];
returnself;
}
- (instancetype)nextDayOfDayName:(NVDayUnit)dayUnit {
int currentWeekDay = [_calendar components:_dateTimeCalendarUnit fromDate:_date].weekday;
if (currentWeekDay == dayUnit)
return [self nextWeek];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
if (currentWeekDay < dayUnit)
dateComponents.day = dayUnit - currentWeekDay;
else
dateComponents.day = -currentWeekDay + dayUnit;
_date = [_calendar dateByAddingComponents:dateComponents toDate:_date options:0];
returnself;
}
- (BOOL)isCurrentDayName:(NVDayUnit)dayUnit {
return ([_calendar components:_dateTimeCalendarUnit fromDate:_date].weekday == dayUnit);
}
- (BOOL)isCurrentMonthName:(NVMonthUnit)monthUnit {
return ([_calendar components:_dateTimeCalendarUnit fromDate:_date].month == monthUnit);
}
- (NSInteger)year {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].year;
}
- (void)setYear:(NSInteger)year {
NSDateComponents *components = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
components.year = year;
_date = [_calendar dateFromComponents:components];
}
- (NSInteger)month {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].month;
}
- (void)setMonth:(NSInteger)month {
NSDateComponents *components = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
components.month = month;
_date = [_calendar dateFromComponents:components];
}
- (NSInteger)week {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].week;
}
- (NSInteger)day {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].day;
}
- (void)setDay:(NSInteger)day {
NSDateComponents *components = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
components.day = day;
_date = [_calendar dateFromComponents:components];
}
- (NSInteger)hour {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].hour;
}
- (void)setHour:(NSInteger)hour {
NSDateComponents *components = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
components.hour = hour;
_date = [_calendar dateFromComponents:components];
}
- (NSInteger)minute {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].minute;
}
- (void)setMinute:(NSInteger)minute {
NSDateComponents *components = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
components.minute = minute;
_date = [_calendar dateFromComponents:components];
}
- (NSInteger)second {
return [_calendar components:_dateTimeCalendarUnit fromDate:_date].second;
}
- (void)setSecond:(NSInteger)second {
NSDateComponents *components = [_calendar components:_dateTimeCalendarUnit fromDate:_date];
components.second = second;
_date = [_calendar dateFromComponents:components];
}
@end
Nsdate的各种常用操作的更多相关文章
- 【三】用Markdown写blog的常用操作
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...
- php模拟数据库常用操作效果
test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...
- Mac OS X常用操作入门指南
前两天入手一个Macbook air,在装软件过程中摸索了一些基本操作,现就常用操作进行总结, 1关于触控板: 按下(不区分左右) =鼠标左键 control+按下 ...
- mysql常用操作语句
mysql常用操作语句 1.mysql -u root -p 2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...
- nodejs配置及cmd常用操作
一.cmd常用操作 1.返回根目录cd\ 2.返回上层目录cd .. 3.查找当前目录下的所有文件dir 4.查找下层目录cd window 二.nodejs配置 Node.js安装包及源码下载地址为 ...
- Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理
摘要:Oracle数据库的库表常用操作:创建与添加表空间.临时表空间.创建表分区.创建索引.锁表处理 1.表空间 ■ 详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间 --详细查看表空 ...
- python 异常处理、文件常用操作
异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm
- byte数据的常用操作函数[转发]
/// <summary> /// 本类提供了对byte数据的常用操作函数 /// </summary> public class ByteUtil { ','A','B',' ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
随机推荐
- How to move the user document folder to D disk[Windows 7]
when you install windows 7 OS, the system ask for you enter username and password, then you have not ...
- Python之Redis操作
1.安装驱动 输入命令:pip install redis 2.直接使用驱动 import redis r = redis.StrictRedis(host='127.0.0.1', port=637 ...
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- USB协议分析
一.USB设备描述结构 1.逻辑组织结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点. 每个USB设备都可以包 ...
- python 逻辑运算符与比较运算符的差别
文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/05/29/2524376.html 逻辑运算符 and, or, not 比较运算符 ==, !=, ...
- Android--启动拍照功能并返回结果
因为没有深入学习拍照这块功能,所以只是简单的调用了一下系统的拍照功能,下面代码: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下s ...
- P3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
首先,我们先确定,最长的曼哈顿距离只可能为 x1+y2-(x2+y2) 和 x1-y1-(x2-y2) 所以我们只需要维护四个值, 分别代表 max(x+y) ; max(x-y) ; min(x+y ...
- 校园导游之NABC个人分析
校园导游之NABC个人分析 Need: 为不熟悉校园环境的人们(如新生,来咱们学校参观滴)提供便利. Approach: 了解Andriod应用开发:导航功能之外还可以对学校进行宣传,比如拍一些学校的 ...
- java设计模式类图大全
近来在看书实现GoF的23个设计模式,自己一点点地用建模工具按照自己的理解画出类图(是比较符合我个人思考理解的,个人觉得比通用类图更详细些),碰巧找到了一个挺好用的UML建模工具StarUML,也刚好 ...
- 华为p7怎么打开usb调试模式
在应用程序列表中选择[设置]进入系统设置菜单,点击[关于手机]  2.在"版本号"上面连续点击七次:  3.现在返回"设置"界面,发现多了一个"开 ...