【问题标题】:convert string to NSDate object [closed]将字符串转换为 NSDate 对象 [关闭]
【发布时间】:2011-09-24 09:39:14
【问题描述】:

我从 web 服务获取字符串“2011-09-24T00:30:00.000-07:00”。 我不知道这种格式是什么,想在objective-c中转换成日期对象。

所以任何人都知道如何将此字符串转换为日期。

非常感谢

【问题讨论】:

标签: iphone objective-c ios nsdate date-format


【解决方案1】:

从这种格式获取日期/时间存在一个小问题,时区中的“:”需要删除,Apple 不处理这种情况,也不是正确的 UTS 格式。这是一个例子:

NSString *dateString = @"2011-09-24T00:30:00.000-07:00";
dateString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange(dateString.length-3, 1)];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"date: %@", date);

NSLog 输出:date: 2011-09-24 07:30:00 +0000

作为测试显示刚刚创建的日期:

NSString *testDateString = [formatter stringFromDate:date];
NSLog(@"date: %@", testDateString);

NSLog 输出:date: 2011-09-24T03:30:00.100-0400

请注意,时间和时区已通过 NSLog 转换为我的本地时区,同时考虑到日期/时间与原始时间相同。

【讨论】:

  • 您好,感谢您的回复此代码可以帮助我创建日期对象,但问题是它显示错误的时间,因为我的时区可能不同,您能否像字符串一样创建精确时间我给了。如果是,那么您能告诉我该怎么做吗...
【解决方案2】:

Web 服务通常用于表示日期/时间的字符串格式是 RFC 3339

它不能简单地与 NSDate 相互转换,因为它可能包含仅由 NSDate 无法表示的各种信息(例如与 UTC 的时间偏移,以及没有指定时间的日期。)

有些类可以将 RFC 3339 字符串与原生 Cocoa 类型进行映射,例如 this。您可能可以通过使用捷径的更简单的转换来解决问题,但对于健壮的代码,请使用专门编写的类来处理表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2018-05-09
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多