JSON日期为NSDate问题

use*_*987 11 json objective-c nsdate

我有一个JSON格式的日期字符串,它看起来像这样:2013-05-22T10:54:40.437

而我正在尝试将其转换为NSDate.

- (NSString *)dateFromString:(NSString *)datestring{
    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss"];

    NSDate *date = [dateFormat dateFromString:datestring];
    //date is nil here.
    NSDateFormatter *newDateFormatter = [[NSDateFormatter alloc]init];
    [newDateFormatter setDateFormat:@"MM/dd/yyyy"];
    NSString *newString = [newDateFormatter stringFromDate:date];
    NSLog(@"Date -- %@",datestring);


    return newString;
}
Run Code Online (Sandbox Code Playgroud)

但是dateFromString之后的日期是零.有谁知道我在这里做错了什么?谢谢!

Luk*_*cka 31

使用此日期格式:

yyyy-MM-dd'T'HH:mm:ss.SSS
Run Code Online (Sandbox Code Playgroud)

您的代码几乎没有修改:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"];

NSDate *date = [dateFormat dateFromString:datestring];
NSDateFormatter *newDateFormatter = [[NSDateFormatter alloc]init];
[newDateFormatter setDateFormat:@"MM/dd/yyyy"];
NSString *newString = [newDateFormatter stringFromDate:date];
NSLog(@"Date: %@, formatted date: %@", date, newString);
Run Code Online (Sandbox Code Playgroud)

给我这个输出:

Date: 2013-05-22 08:54:40 +0000, formatted date: 05/22/2013
Run Code Online (Sandbox Code Playgroud)

编辑:"ikinci viking"如何在评论中指出,逃避破折号是不必要的.转义已从代码中删除


适用于iOS 11+的更新

ISO8601DateFormatter 是在iOS 10+上解析互联网日期的推荐方法.

但是,它几乎没有问题阻止它与问题中的特定格式一起使用:

  • 仅在iOS 11+上支持毫秒
  • 它不适用于没有时区的日期(相关案例).日期字符串必须包含时区部分(例如+00:00Z"祖鲁时间"UTC)

如果日期字符串包含毫秒和时区(例如2018-09-07T14:04:13.143Z),则可以按如下方式使用(Swift示例):

let isoDateFormatter = ISO8601DateFormatter()
isoDateFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
Run Code Online (Sandbox Code Playgroud)