在PHP语言中通过date('c')
获取ISO8601日期字符串(例如,2004-02-12T15:19:21+00:00
)非常简单,但是如何在Objective-C (iPhone)中获取它呢?有没有类似的捷径呢?
这是我找到的很长的方法:
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
NSDate *now = [NSDate date];
NSString *formattedDateString = [dateFormatter stringFromDate:now];
NSLog(@"ISO-8601 date: %@", formattedDateString);
// Output: ISO-8601 date: 2013-04-27T13:27:50-0700
对于如此核心的东西,这似乎有太多的繁琐之处。
发布于 2013-04-28 01:20:42
使用NSDateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
[dateFormatter setCalendar:[NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]];
NSDate *now = [NSDate date];
NSString *iso8601String = [dateFormatter stringFromDate:now];
在Swift中:
let dateFormatter = DateFormatter()
let enUSPosixLocale = Locale(identifier: "en_US_POSIX")
dateFormatter.locale = enUSPosixLocale
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateFormatter.calendar = Calendar(identifier: .gregorian)
let iso8601String = dateFormatter.string(from: Date())
发布于 2016-08-26 19:39:37
iOS 10引入了一个新的NSISO8601DateFormatter
类来处理这个问题。如果你使用的是Swift 3,你的代码应该是这样的:
let formatter = ISO8601DateFormatter()
let date = formatter.date(from: "2016-08-26T12:39:00Z")
let string = formatter.string(from: Date())
发布于 2013-09-04 16:06:59
作为对maddy答案的补充,ISO 8601的时区格式应为"ZZZZZ“(5乘以Z),而不是单个"Z”(用于RFC 822格式)。至少在iOS 6上是这样。
(参见http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns)
https://stackoverflow.com/questions/16254575
复制相似问题