【问题标题】:NSString to NSDate for yyyy-MM-dd'T'HH:mm:ss.SSS+05:30 formatyyyy-MM-dd'T'HH:mm:ss.SSS+05:30 格式的 NSString 到 NSDate
【发布时间】:2014-01-26 09:35:58
【问题描述】:

我得到的日期字符串是这种格式的 2014-01-08T21:21:22.737+05:30。我如何将其授予 NSDate?

我试过了:

       NSString *currentDateString = @"2014-01-08T21:21:22.737+05:30";
       [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS+05:30"];
       NSDate *currentDate = [dateFormatter dateFromString:currentDateString];

       NSLog(@"CurrentDate:%@", currentDate);

它返回零。有什么想法吗?

【问题讨论】:

  • 你初始化 dateFormatter 了吗?同样如果初始化同样得到输出
  • @kagmanoj 你的问题解决了吗?如果通过以下答案解决,则接受该答案,以便其他人将来可以使用它谢谢
  • (并且不要编辑您的原始问题并将“坏”代码替换为答案 - 如果您想要问题中的答案将其附加到最后,以便人们可以看到原始问题.)

标签: ios iphone objective-c nsdate nsdateformatter


【解决方案1】:

使用此代码可以正常工作,您的 dateFormatter 错误。

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];

NSString *currentDateString = @"2014-01-08T21:21:22.737+05:30";
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"];        
NSDate *currentDate = [dateFormatter dateFromString:currentDateString];

NSLog(@"CurrentDate:%@", currentDate);

编码愉快!!!!!!!!!!!!

【讨论】:

  • 这在历史上是行不通的(尽管我想它可能在较新的平台上)。最后的: 是问题所在,要么需要删除它,要么使用“ZZZZZ”。
  • 我希望我可以多次投票,这救了我的命
【解决方案2】:

您的日期格式包含作为文字的时区:yyyy-MM-dd'T'HH:mm:ss.SSS+05:30 +05:30 它是时区定义。你应该用Z解析它。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
NSString *currentDateString = @"2014-01-08T21:21:22.737+05:30";
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"];
NSDate *currentDate = [dateFormatter dateFromString:currentDateString];

NSLog(@"CurrentDate:%@", currentDate);

【讨论】:

  • Z 仅适用于 iOS 7 上的 iOS 6 在时区中 : 存在错误。因此,如果您的目标是 iOS 6,请在解析之前删除 :
  • 我的答案也适用于 iOS 6.. 你可以查看一下..:)
  • 奇怪的是,在 iOS 7 中 Z 有效,因为据我所知 ZZZZ 将返回 3 个字母的 ISO 时区名称。但他确实有效。
  • 但是@rckoenes 不改变日期格式也可以。如果你在提问者代码中初始化datefomat??
  • 但是这里的问题是为什么它返回空值?并且在执行提问者代码和您的代码之后。您可以看到两个输出是相同的。请关注??这是两个输出,一个是您的代码输出 CurrentDate:2014-01-08 15:51:22 +0000,另一个是问题代码输出 CurrentDate:2014-01-08 15:51:22 +0000 在初始化日期格式化程序后
【解决方案3】:
NSString *p=@"2014-01-08T21:21:22.737+05:30";


NSDateFormatter *dateformat=[[NSDateFormatter alloc]init];

[dateformat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"];

NSDate *datefor=[dateformat dateFromString:p];

[dateformat setDateFormat:@"MM-dd-yyyy hh:mm a"];

NSString *dateStr=[dateformat stringFromDate:datefor];


NSDate *datetype=[dateformat dateFromString:dateStr];

【讨论】:

    【解决方案4】:

    我认为您需要在代码中像下面这样初始化dateFormatter。因为如果不总是初始化,你会得到空值:-

    dateFormatter=[[NSDateFormatter alloc]init];
    

    【讨论】:

      【解决方案5】:

      将你的 dateFormat 设置为

      [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"];
      

      是的,现在 NSLog 正在打印一个特定的日期。!!!

      享受编码

      【讨论】:

      • 如果在初始化 dateFormatter 后执行操作码,您将得到输出。请关注一次
      • 我已经初始化了它。这个解决方案正在工作。!!
      • 我的意思是在初始化日期格式化程序后,提问者代码也可以工作。
      • 如果您尝试了提问者代码,则不会打印 NSLog (null)
      • 我在初始化 dateFormatter Output-CurrentDate:2014-01-08 15:51:22 +0000 后执行提问者代码时得到这个
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多