为 iOS & Mac 提供快速 ISO8601 日期解析器和编写器。
Carthage 是推荐安装 ISO8601 的方法。将以下内容添加到您的 Cartfile 中:
github "soffes/ISO8601"
您也可以使用 CocoaPods 进行安装
pod 'ISO8601'
对于手动安装,我建议将项目作为子项目添加到您的项目或工作区中,并将框架作为目标依赖项添加。
首先,导入适当的头文件
@import ISO8601; // Use #import <ISO8601/ISO8601.h> if you're using CocoaPods
此库使用 NSDateComponents
进行读取和写入。以下是一个示例:
// Reading
NSDateComponents *dateComponents = [ISO8601Serialization dateComponentsForString:@"1999-05-19T23:55:21+09:00"];
// Writing
NSString *ISO8601String = [ISO8601Serialization stringForDateComponents:dateComponents];
存在一个 NSDate
分类,用于方便的转换
// Reading
NSDate *date = [NSDate dateWithISO8601String:@"1999-05-19T23:55:21+09:00"];
// Writing
NSString *ISO8601String = [date ISO8601String];
如果您需要更多的转换控制或需要知道输入的时间区域,您可以使用类别提供的先进方法
// Reading
NSTimeZone *timeZone;
NSDate *date = [NSDate dateWithISO8601String:@"1999-05-19T23:55:21+09:00" timeZone:&timeZone usingCalendar:calendarOrNil];
// Writing
NSString *ISO8601String = [date ISO8601StringWithTimeZone:timeZoneOrNil usingCalendar:calendarOrNil];
NSDateComponents
是核心数据结构,因为 NSDate
未能很好地保留时区信息。
值得注意的是,如果某个值不在输入字符串中,则 NSDateComponents
中的值将为 nil
。例如,1999-05-19T23:55:21
将具有 nil
时区,但 1999-05-19T23:55:21+00:00
和 1999-05-19T23:55:21Z
将具有 UTC 时区。
+[NSDate dateWithISO8601String:]
分类将始终返回 UTC 日期。如果您想要另一个时区的日期,应使用 +[NSDate ISO8601StringWithTimeZone:usingCalendar:]
(您可以传递 nil
作为日历参数以使用当前日历)。
享受吧。