issue with date formatting using NSDateFormatter

2019-03-22 02:31发布

I have a date string which I want to convert to another format.

The original date string example is : "2013-06-04 02:19:21 +0000"

I want to convert this to "Wed, Jun 4"

NSString * date_string = @"2013-06-04 02:19:21 +0000";

NSDateFormatter *complexdateFormater = [[NSDateFormatter alloc] init];
[complexdateFormater setDateFormat:@"yyyy-M-DD HH:mm:ss Z"];
 NSDate* complexdate = [complexdateFormater dateFromString:date_string];
NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"EE, MMM d" options:0
                                                          locale:[NSLocale    currentLocale]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatString];
NSString *todayString = [dateFormatter stringFromDate:complexdate];

but the today string for the above case prints out : the month as Jan irrespective of the month value in the original string.

where am i going wrong ?

3条回答
ら.Afraid
2楼-- · 2019-03-22 02:42

Well to start, you have two quotes after +0000. Im not sure if this is a typo in this post or not, but it could effect something.

This Line:

[complexdateFormater setDateFormat:@"yyyy-M-DD HH:mm:ss Z"];

Should be this:

[complexdateFormater setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

in your date string the month is 06 not just 6 so you needed two month digits :) Also, you needed DD to be dd, as rmaddy pointed out below.

查看更多
女痞
3楼-- · 2019-03-22 02:52

Here you go my friend

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EEE, MMM dd"];
    NSString *theDate = [dateFormat stringFromDate:date1];

Date formatter reference for everyone else that might visit this post. Do rate it up if it helped!

/*
     x           number
     xx          two digit number
     xxx         abbreviated name
     xxxx        full name

     a           AM/PM
     A           millisecond of day
     c           day of week (c,cc,ccc,cccc)
     d           day of month
     e           day of week (e,EEE,EEEE)
     F           week of month
     g           julian day (since 1/1/4713 BC)
     G           era designator (G=GGG,GGGG)
     h           hour (1-12, zero padded)
     H           hour (0-23, zero padded)
     L           month of year (L,LL,LLL,LLLL)
     m           minute of hour (0-59, zero padded)
     M           month of year (M,MM,MMM,MMMM)
     Q           quarter of year (Q,QQ,QQQ,QQQQ)
     s           seconds of minute (0-59, zero padded)
     S           fraction of second
     u           zero padded year
     v           general timezone (v=vvv,vvvv)
     w           week of year (0-53, zero padded)
     y           year (y,yy,yyyy)
     z           specific timezone (z=zzz,zzzz)
     Z           timezone offset +0000

     sql         y-M-d H:m:s
     rss         [E, ]d MMM y[y] H:m:s Z|z[zzz]
     */
查看更多
地球回转人心会变
4楼-- · 2019-03-22 02:54

Replace your code with this...

NSString * date_string = @"2013-06-04 02:19:21 +0000";
NSDateFormatter *complexdateFormater = [[NSDateFormatter alloc] init];
[complexdateFormater setDateFormat:@"EEE, MMM dd"];
NSDate* complexdate = [complexdateFormater dateFromString:date_string];

If you want to check the date do this instead of NSLog as NSLog returns date in GMT format only...

NSLog(@"Converted date: %@", [complexdateFormater stringFromDate:complexDate]);
查看更多
登录 后发表回答