Skip to content

Commit

Permalink
#import "NSDateFormatter+Make.h"
Browse files Browse the repository at this point in the history
  • Loading branch information
silence0201 committed Apr 3, 2017
1 parent 49fd969 commit ef96569
Show file tree
Hide file tree
Showing 4 changed files with 299 additions and 0 deletions.
14 changes: 14 additions & 0 deletions Category.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
E8BD93741E92631200322F8B /* NSLayoutConstraint+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = E8BD93731E92631200322F8B /* NSLayoutConstraint+Extensions.m */; };
E8BD93771E92654B00322F8B /* NSDate+Show.m in Sources */ = {isa = PBXBuildFile; fileRef = E8BD93761E92654B00322F8B /* NSDate+Show.m */; };
E8BD937D1E9283CB00322F8B /* NSLayoutConstraint+Refer.m in Sources */ = {isa = PBXBuildFile; fileRef = E8BD937C1E9283CB00322F8B /* NSLayoutConstraint+Refer.m */; };
E8BD93811E92862D00322F8B /* NSDateFormatter+Make.m in Sources */ = {isa = PBXBuildFile; fileRef = E8BD93801E92862D00322F8B /* NSDateFormatter+Make.m */; };
E8DD4B3C1E51B82E008B6BDF /* NSString+Color.m in Sources */ = {isa = PBXBuildFile; fileRef = E8DD4B3B1E51B82E008B6BDF /* NSString+Color.m */; };
E8DD4B4C1E51C2C2008B6BDF /* NSStringColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8DD4B4B1E51C2C2008B6BDF /* NSStringColorTests.m */; };
E8DD4B4F1E51C51F008B6BDF /* UIColor+FlatColors.m in Sources */ = {isa = PBXBuildFile; fileRef = E8DD4B4E1E51C51F008B6BDF /* UIColor+FlatColors.m */; };
Expand Down Expand Up @@ -415,6 +416,8 @@
E8BD93761E92654B00322F8B /* NSDate+Show.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Show.m"; sourceTree = "<group>"; };
E8BD937B1E9283CB00322F8B /* NSLayoutConstraint+Refer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+Refer.h"; sourceTree = "<group>"; };
E8BD937C1E9283CB00322F8B /* NSLayoutConstraint+Refer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+Refer.m"; sourceTree = "<group>"; };
E8BD937F1E92862D00322F8B /* NSDateFormatter+Make.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDateFormatter+Make.h"; sourceTree = "<group>"; };
E8BD93801E92862D00322F8B /* NSDateFormatter+Make.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDateFormatter+Make.m"; sourceTree = "<group>"; };
E8DD4B3A1E51B82E008B6BDF /* NSString+Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Color.h"; sourceTree = "<group>"; };
E8DD4B3B1E51B82E008B6BDF /* NSString+Color.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Color.m"; sourceTree = "<group>"; };
E8DD4B411E51C29F008B6BDF /* CategoryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CategoryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -975,6 +978,15 @@
path = NSLayoutConstraint;
sourceTree = "<group>";
};
E8BD937E1E92860C00322F8B /* NSDateFormatter */ = {
isa = PBXGroup;
children = (
E8BD937F1E92862D00322F8B /* NSDateFormatter+Make.h */,
E8BD93801E92862D00322F8B /* NSDateFormatter+Make.m */,
);
path = NSDateFormatter;
sourceTree = "<group>";
};
E8DD4B421E51C29F008B6BDF /* CategoryTests */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -1186,6 +1198,7 @@
E8E945091E210B6D00EE98B0 /* NSArray */,
E8E945121E210B6D00EE98B0 /* NSBundle */,
E8E945151E210B6D00EE98B0 /* NSData */,
E8BD937E1E92860C00322F8B /* NSDateFormatter */,
E8E9451E1E210B6D00EE98B0 /* NSDate */,
E8E945251E210B6D00EE98B0 /* NSDictionary */,
E8E945321E210B6D00EE98B0 /* NSFileManager */,
Expand Down Expand Up @@ -2028,6 +2041,7 @@
E8E946241E210B6D00EE98B0 /* NSString+Contains.m in Sources */,
E8E945FF1E210B6D00EE98B0 /* NSArray+Block.m in Sources */,
E8E9461A1E210B6D00EE98B0 /* NSObject+Block.m in Sources */,
E8BD93811E92862D00322F8B /* NSDateFormatter+Make.m in Sources */,
E83465EC1E8ABA8B00F1F757 /* UINavigationItem+Margin.m in Sources */,
E8E946221E210B6D00EE98B0 /* NSObject+Runtime.m in Sources */,
E854CE4A1E7D570500AD9F13 /* NSIndexPath+Offset.m in Sources */,
Expand Down
151 changes: 151 additions & 0 deletions Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
//
// NSDateFormatter+Make.h
// Category
//
// Created by 杨晴贺 on 2017/4/3.
// Copyright © 2017年 silence. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger, NSDateFormatterFormat) {
NSDateFormatterFormatNone = 0,
/**
* Returns a basic formatter for a full date as four digit year, two digit month of year, and two digit day of month (yyyyMMdd).
* None: yyyyMMdd
* Time: yyyyMMdd'T'HHmmss.SSSZ
* NoMillis: yyyyMMdd'T'HHmmssZ
*/
NSDateFormatterFormatBasic,
/**
* Returns a formatter for a full ordinal date, using a four digit year and three digit dayOfYear (yyyyDDD).
* None: yyyyDDD
* Time: yyyyDDD'T'HHmmss.SSSZ
* NoMillis: yyyyDDD'T'HHmmssZ
*/
NSDateFormatterFormatBasicOrdinalDate,
/**
* Returns a basic formatter for a two digit hour of day, two digit minute of hour, two digit second of minute, three digit millis, and time zone offset (HHmmss.SSSZ).
* None/Time: HHmmss.SSSZ
* NoMillis: HHmmssZ
*/
NSDateFormatterFormatBasicTime,
/**
* Returns a basic formatter for a two digit hour of day, two digit minute of hour, two digit second of minute, three digit millis, and time zone offset prefixed by 'T' ('T'HHmmss.SSSZ).
* None/Time: T'HHmmss.SSSZ
* NoMillis: T'HHmmss
*/
NSDateFormatterFormatBasicTTime,
/**
* Returns a basic formatter for a full date as four digit weekyear, two digit week of weekyear, and one digit day of week (xxxx'W'wwe).
* None: xxxx'W'wwe
* Time: xxxx'W'wwe'T'HHmmss.SSSZ
* NoMillis: xxxx'W'wwe'T'HHmmssZ
*/
NSDateFormatterFormatBasicWeekDate,
/**
* Returns a formatter for a full date as four digit year, two digit month of year, and two digit day of month (yyyy-MM-dd).
* None: yyyy-MM-dd
* Time: yyyy-MM-dd'T'HH:mm:ss.SSSZZ
* NoMillis: yyyy-MM-dd'T'HH:mm:ssZZ
*/
NSDateFormatterFormatDate,
/**
* Returns a formatter that combines a full date, two digit hour of day, two digit minute of hour, two digit second of minute, and three digit fraction of second (yyyy-MM-dd'T'HH:mm:ss.SSS).
* None/Time: yyyy-MM-dd'T'HH:mm:ss.SSS
* NoMillis: yyyy-MM-dd'T'HH:mm:ss
*/
NSDateFormatterFormatDateHourMinuteSecondFraction,
/**
* Returns a formatter that combines a full date and time, separated by a 'T' (yyyy-MM-dd'T'HH:mm:ss.SSSZZ).
* None/Time: yyyy-MM-dd'T'HH:mm:ss.SSSZZ
* NoMillis: yyyy-MM-dd'T'HH:mm:ssZZ
*/
NSDateFormatterFormatDateTime,
/**
* Returns a formatter for a two digit hour of day, two digit minute of hour, two digit second of minute, and three digit fraction of second (HH:mm:ss.SSS).
* None/Time: HH:mm:ss.SSS
* NoMillis: HH:mm:ss
*/
NSDateFormatterFormatHourMinuteSecondFraction,
/**
* Returns a formatter for a full ordinal date, using a four digit year and three digit dayOfYear (yyyy-DDD).
* None: yyyy-MM-dd
* Time: yyyy-DDD'T'HH:mm:ss.SSSZZ
* NoMillis: yyyy-DDD'T'HH:mm:ssZZ
*/
NSDateFormatterFormatOrdinalDate,
/**
* Returns a formatter for a two digit hour of day, two digit minute of hour, two digit second of minute, three digit fraction of second, and time zone offset prefixed by 'T' ('T'HH:mm:ss.SSSZZ).
* None/Time: 'T'HH:mm:ss.SSSZZ
* NoMillis: 'T'HH:mm:ssZZ
*/
NSDateFormatterFormatTTime,
/**
* Returns a formatter for a two digit hour of day, two digit minute of hour, two digit second of minute, three digit fraction of second, and time zone offset (HH:mm:ss.SSSZZ).
* None/Time: HH:mm:ss.SSSZZ
* NoMillis: HH:mm:ssZZ
*/
NSDateFormatterFormatTime,
/**
* Returns a formatter for a full date as four digit weekyear, two digit week of weekyear, and one digit day of week (xxxx-'W'ww-e).
* None: xxxx-'W'ww-e
* Time: xxxx-'W'ww-e'T'HH:mm:ss.SSSZZ
* NoMillis: xxxx-'W'ww-e'T'HH:mm:ssZZ
*/
NSDateFormatterFormatWeekDate
};

typedef NS_ENUM(NSUInteger, NSDateFormatterTimeStyle) {
NSDateFormatterTimeStyleNone = 0,
NSDateFormatterTimeStyleTime,
NSDateFormatterTimeStyleNoMillis
};

@interface NSDateFormatter (Make)

/**
*
* Returns a `NSDateFormatter` with the specific `NSDateFormatterFormat` and `NSDateFormatterTimeStyle`
*
* @param format NSDateFormatterFormat
* @param timeStyle NSDateFormatterFormat
*
* @return NSDateFormatter instance
*/
+ (instancetype)dateFormatterWithDateFormat:(NSDateFormatterFormat)format timeStyle:(NSDateFormatterTimeStyle)timeStyle;


/**
*
* Returns a `NSDateFormatter` with the specific `NSDateFormatterFormat` and `NSDateFormatterTimeStyleNone` as `NSDateFormatterTimeStyle`
*
* @param format NSDateFormatterFormat
*
* @return NSDateFormatter instance
*/
+ (instancetype)dateFormatterWithDateFormat:(NSDateFormatterFormat)format;

/**
*
* Returns a string date format with the specific `NSDateFormatterFormat` and `NSDateFormatterTimeStyle`
*
* @param format NSDateFormatterFormat
* @param timeStyle NSDateFormatterTimeStyle
*
* @return NSString
*/
+ (NSString *)stringFormatForFormat:(NSDateFormatterFormat)format timeStyle:(NSDateFormatterTimeStyle)timeStyle;


/**
*
* Returns a string date format with the specific `NSDateFormatterFormat` and `NSDateFormatterTimeStyleNone` as `NSDateFormatterTimeStyle`
*
* @param format NSDateFormatterFormat
*
* @return NSString
*/
+ (NSString *)stringFormatForFormat:(NSDateFormatterFormat)format;

@end
132 changes: 132 additions & 0 deletions Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
//
// NSDateFormatter+Make.m
// Category
//
// Created by 杨晴贺 on 2017/4/3.
// Copyright © 2017年 silence. All rights reserved.
//

#import "NSDateFormatter+Make.h"

@implementation NSDateFormatter (Make)

+ (NSString *)stringFormatForFormat:(NSDateFormatterFormat)format{
return [self.class stringFormatForFormat:format timeStyle:NSDateFormatterTimeStyleNone];
}

+ (NSString *)stringFormatForFormat:(NSDateFormatterFormat)format timeStyle:(NSDateFormatterTimeStyle)timeStyle{
switch (format) {
case NSDateFormatterFormatNone:
default:
return nil;
case NSDateFormatterFormatBasic:
if (timeStyle == NSDateFormatterTimeStyleTime) {
return @"yyyyMMdd'T'HHmmss.SSSZ";
} else if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"yyyyMMdd'T'HHmmssZ";
}
return @"yyyyMMdd";

case NSDateFormatterFormatBasicOrdinalDate:
if (timeStyle == NSDateFormatterTimeStyleTime) {
return @"yyyyDDD'T'HHmmss.SSSZ";
} else if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"yyyyDDD'T'HHmmssZ";
}

return @"yyyyDDD";

case NSDateFormatterFormatBasicTime:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"HHmmssZ";
}
return @"HHmmss.SSSZ";

case NSDateFormatterFormatBasicTTime:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"T'HHmmssZ";
}
return @"'T'HHmmss.SSSZ";


case NSDateFormatterFormatBasicWeekDate:
if (timeStyle == NSDateFormatterTimeStyleTime) {
return @"xxxx'W'wwe'T'HHmmss.SSSZ";
} else if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"xxxx'W'wwe'T'HHmmssZ";
}
return @"xxxx'W'wwe";

case NSDateFormatterFormatDate:
if (timeStyle == NSDateFormatterTimeStyleTime) {
return @"yyyy-MM-dd'T'HH:mm:ss.SSS";
} else if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"yyyy-MM-dd'T'HH:mm:ss";
}
return @"yyyy-MM-dd";

case NSDateFormatterFormatDateTime:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"yyyy-MM-dd'T'HH:mm:ssZZ";
}
return @"yyyy-MM-dd'T'HH:mm:ss.SSSZZ";

case NSDateFormatterFormatHourMinuteSecondFraction:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"HH:mm:ss";
}
return @"HH:mm:ss.SSS";

case NSDateFormatterFormatTime:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"HH:mm:ssZZ";
}
return @"HH:mm:ss.SSSZZ";

case NSDateFormatterFormatOrdinalDate:
if (timeStyle == NSDateFormatterTimeStyleTime) {
return @"yyyy-DDD'T'HH:mm:ss.SSSZZ";
} else if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"yyyy-DDD'T'HH:mm:ssZZ";
}
return @"yyyy-DDD";


case NSDateFormatterFormatTTime:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"'T'HH:mm:ssZZ";
}
return @"'T'HH:mm:ss.SSSZZ";

case NSDateFormatterFormatDateHourMinuteSecondFraction:
if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"yyyy-MM-dd'T'HH:mm:ss";
}
return @"yyyy-MM-dd'T'HH:mm:ss.SSS";

case NSDateFormatterFormatWeekDate:
if (timeStyle == NSDateFormatterTimeStyleTime) {
return @"xxxx-'W'ww-e'T'HH:mm:ss.SSSZZ";
} else if (timeStyle == NSDateFormatterTimeStyleNoMillis) {
return @"xxxx-'W'ww-e'T'HH:mm:ssZZ";
}
return @"xxxx-'W'ww-e";
}
return nil;
}

+ (instancetype)dateFormatterWithDateFormat:(NSDateFormatterFormat)format{
return [self.class dateFormatterWithDateFormat:format timeStyle:NSDateFormatterTimeStyleNone];
}

+ (instancetype)dateFormatterWithDateFormat:(NSDateFormatterFormat)format timeStyle:(NSDateFormatterTimeStyle)timeStyle{
NSString *stringFormat = [self.class stringFormatForFormat:format timeStyle:timeStyle];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
if (stringFormat != nil) {
[formatter setDateFormat:stringFormat];
}
return formatter;
}

@end
2 changes: 2 additions & 0 deletions Classes/Foundation/SIFoundation.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@

#import "NSBundle+AppInfo.h"

#import "NSDateFormatter+Make.h"

#import "NSData+Hash.h"
#import "NSData+Encrypt.h"
#import "NSData+Code.h"
Expand Down

0 comments on commit ef96569

Please sign in to comment.