-3

I'm trying to get date asNSString. I'm receiving date in the format 2017-05-05T04:42:44.954604Z

Below is the code in which I'm trying to apply NSDateFormatter

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *newdate = [utcDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.Z"];
msgDate = [dateFormatter dateFromString:newdate];

But msgDate is showing nil

Dilip Tiwari
  • 1,441
  • 18
  • 31
Mughees Musaddiq
  • 1,060
  • 1
  • 10
  • 27
  • 1
    Your utcDate is provided in ISO 8601 format. Look at this question: http://stackoverflow.com/questions/17558859/convert-iso-8601-to-nsdate – pesch May 05 '17 at 06:17
  • Another similar http://stackoverflow.com/questions/28016578/swift-how-to-create-a-date-time-stamp-and-format-as-iso-8601-rfc-3339-utc-tim – Nirav D May 05 '17 at 06:20
  • I think it's not said enough times, but write `2017-05-05T04:42:44.954604Z` and below write `yyyy-MM-dd HH:mm:ss.Z`. What's wrong for the dateFormat to not match the string date? That will tell you your issue? What's about the "T"? How is it interpreted in your dateFormat? Etc. – Larme May 05 '17 at 08:22

3 Answers3

2

use 'SS' specifier (with number of S's equal to number of digits you want to get - 6 in your case)

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

instead of

 NSString *newdate = [utcDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.Z"];

UPDATE

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"];
 NSDate *msgDate = [dateFormatter dateFromString:@"2017-05-05T04:42:44.954604Z"];

OUTPUT

enter image description here

Anbu.Karthik
  • 82,064
  • 23
  • 174
  • 143
0

Try this

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ";// chang
NSDate *date = [dateFormatter dateFromString:@"2017-04-13T05:57:44.886Z"];
NSString * msgDate = [dateFormatter stringFromDate:date];
 // if get nil **date** try to change this time format 
KKRocks
  • 8,222
  • 1
  • 18
  • 84
0
 #pragma mark- Change dateFormat method
 + (NSString*) changeDateFormat:(NSString*)date
 {
     NSDateFormatter * formatter = [[NSDateFormatter alloc] init];

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

     NSDate* fromDate = [formatter dateFromString:date];
     [formatter setDateFormat:@"YYYY.MM.dd"];

     NSString* formatedDate = [formatter stringFromDate:fromDate];

     if (formatedDate == nil)
     {
         [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

         fromDate = [formatter dateFromString:date];
         [formatter setDateFormat:@"YYYY.MM.dd"];

         formatedDate = [formatter stringFromDate:fromDate];

     }
     if (formatedDate == nil)
    {
         [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];

          fromDate = [formatter dateFromString:date];
         [formatter setDateFormat:@"YYYY.MM.dd"];

         formatedDate = [formatter stringFromDate:fromDate];

    }

    return formatedDate;

 }
Vinay Kumar
  • 107
  • 1
  • 12