From ef9656989c7d8dd9b720cf2549f3860fdcd36936 Mon Sep 17 00:00:00 2001 From: Silence <374619540@qq.com> Date: Mon, 3 Apr 2017 21:39:17 +0800 Subject: [PATCH] #import "NSDateFormatter+Make.h" --- Category.xcodeproj/project.pbxproj | 14 ++ .../NSDateFormatter/NSDateFormatter+Make.h | 151 ++++++++++++++++++ .../NSDateFormatter/NSDateFormatter+Make.m | 132 +++++++++++++++ Classes/Foundation/SIFoundation.h | 2 + 4 files changed, 299 insertions(+) create mode 100644 Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.h create mode 100644 Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.m diff --git a/Category.xcodeproj/project.pbxproj b/Category.xcodeproj/project.pbxproj index 78eb9f8..c0005b2 100644 --- a/Category.xcodeproj/project.pbxproj +++ b/Category.xcodeproj/project.pbxproj @@ -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 */; }; @@ -415,6 +416,8 @@ E8BD93761E92654B00322F8B /* NSDate+Show.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Show.m"; sourceTree = ""; }; E8BD937B1E9283CB00322F8B /* NSLayoutConstraint+Refer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+Refer.h"; sourceTree = ""; }; E8BD937C1E9283CB00322F8B /* NSLayoutConstraint+Refer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+Refer.m"; sourceTree = ""; }; + E8BD937F1E92862D00322F8B /* NSDateFormatter+Make.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDateFormatter+Make.h"; sourceTree = ""; }; + E8BD93801E92862D00322F8B /* NSDateFormatter+Make.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDateFormatter+Make.m"; sourceTree = ""; }; E8DD4B3A1E51B82E008B6BDF /* NSString+Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Color.h"; sourceTree = ""; }; E8DD4B3B1E51B82E008B6BDF /* NSString+Color.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Color.m"; sourceTree = ""; }; E8DD4B411E51C29F008B6BDF /* CategoryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CategoryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -975,6 +978,15 @@ path = NSLayoutConstraint; sourceTree = ""; }; + E8BD937E1E92860C00322F8B /* NSDateFormatter */ = { + isa = PBXGroup; + children = ( + E8BD937F1E92862D00322F8B /* NSDateFormatter+Make.h */, + E8BD93801E92862D00322F8B /* NSDateFormatter+Make.m */, + ); + path = NSDateFormatter; + sourceTree = ""; + }; E8DD4B421E51C29F008B6BDF /* CategoryTests */ = { isa = PBXGroup; children = ( @@ -1186,6 +1198,7 @@ E8E945091E210B6D00EE98B0 /* NSArray */, E8E945121E210B6D00EE98B0 /* NSBundle */, E8E945151E210B6D00EE98B0 /* NSData */, + E8BD937E1E92860C00322F8B /* NSDateFormatter */, E8E9451E1E210B6D00EE98B0 /* NSDate */, E8E945251E210B6D00EE98B0 /* NSDictionary */, E8E945321E210B6D00EE98B0 /* NSFileManager */, @@ -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 */, diff --git a/Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.h b/Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.h new file mode 100644 index 0000000..82c15aa --- /dev/null +++ b/Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.h @@ -0,0 +1,151 @@ +// +// NSDateFormatter+Make.h +// Category +// +// Created by 杨晴贺 on 2017/4/3. +// Copyright © 2017年 silence. All rights reserved. +// + +#import + +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 diff --git a/Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.m b/Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.m new file mode 100644 index 0000000..a035726 --- /dev/null +++ b/Classes/Foundation/NSDateFormatter/NSDateFormatter+Make.m @@ -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 diff --git a/Classes/Foundation/SIFoundation.h b/Classes/Foundation/SIFoundation.h index 0fa8b07..9aaf7de 100644 --- a/Classes/Foundation/SIFoundation.h +++ b/Classes/Foundation/SIFoundation.h @@ -42,6 +42,8 @@ #import "NSBundle+AppInfo.h" +#import "NSDateFormatter+Make.h" + #import "NSData+Hash.h" #import "NSData+Encrypt.h" #import "NSData+Code.h"