3

今天我的问题是关于日期格式和字符串。我的应用程序从 Internet 下载了一些代表日期的字符串。日期格式总是这样:“2010-05-24 at 20:45” 我需要将此字符串转换为 NSDate 对象以执行一些日期操作。我试过这段代码:

NSString * dateString = @"2010-05-24 at 20:45" // actually downloaded from the internet
NSDateFormatter * myDateFormatter = [[NSDateFormatter alloc] init];
[myDateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];
NSDate * dateFromString = [myDateFormatter dateFromString:dateString];

只要 iPhone 设置为 24 小时制,这似乎工作得很好。只要我在常规设置中切换到 12h 时钟,就不会创建 NSDate 对象(并且应用程序会愉快地崩溃)我读过其他人遇到类似问题,但我似乎没有找到解决方案。现在的问题是:只要我指定它应该使用哪种格式来解析字符串(由于它来自网络,它是不可修改的),NSDateFormatter 对用户设置是敏感的对我来说没有意义,检查用户设置有什么用?更重要的是,我怎样才能执行我的任务(无论用户设置如何,从字符串中获取 NSDate 对象)?

4

3 回答 3

5

解释了这个问题背后的原因以及如何解决它。

于 2010-11-04T18:56:12.123 回答
4
NSString * dateString = @"2010-05-24 at 20:45" // actually downloaded from the internet
NSDateFormatter * myDateFormatter = [[NSDateFormatter alloc] init];
[myDateFormatter setDateFormat:@"yyyy-MM-dd 'at' hh:mm"];
NSDate * dateFromString = [myDateFormatter dateFromString:dateString];

在设置日期格式时使用“hh”而不是“HH”

于 2011-04-28T04:38:19.673 回答
1

我发现这篇来自 Apple 的文章准确地解释了这个问题!(https://developer.apple.com/library/content/qa/qa1480/_index.html

但无论如何,简短的答案是您需要将语言环境设置为“en_US_POSIX”,以便它与任何用户设置的日期相关的配置一起使用。

let stringDate = "2017-03-15T11:37:16-03:00" // ISO8601 formatted string

let iso8601Formatter = DateFormatter()
iso8601Formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
iso8601Formatter.locale = Locale(identifier: "en_US_POSIX")
iso8601Formatter.date(from: stringDate)
于 2017-03-15T14:39:18.387 回答