Converting a date format in objective C

2019-01-23 23:11发布

问题:

How can i convert the following date "Sun Jul 17 07:48:34 +0000 2011" to the following format "2011-07-17 07:48:34"?

I used NSDateFormatter as shown below but it didnt work. It gives null as a result.

NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];

回答1:

You've got your Date Format wrong for the style of Date you are passing in. Here is a document explaining the different modifiers: Date Format Patterns

To parse the Date "Sun Jul 17 07:48:34 +0000 2011", you'd need a Format like so:

[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

To get it into the following format: "2011-07-17 07:48:34", here is the full code:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
NSDate *date  = [dateFormatter dateFromString:sDate];

// Convert to new Date Format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date]; 


回答2:

If sDate is your string that's in the format "Sun Jul 17 07:48:34 +0000 2011", you have to convert that into a NSDate. Then, you can use a second NSDateFormatter to convert this date into your desired format "yyyy-MM-dd HH:mm:ss".

If you need to figure out the string needed to convert, this site has a great reference: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

e.g. "Sun Jul 17 07:48:34 +0000 2011" can be parsed with

[dateFormatter setDateFormat:@"EEE MMM d HH:mm:ss ZZZ yyyy"];

As a bit of advice, non-standard dates like "Jul" (should be July) can make problems here. It's faster to just convert the needed parts in plain C, with strftime(). See the reference: http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst263.htm

You can then convert the unix timestamp back in a NSDate with

[NSDate dateWithTimeIntervalSince1970:]

Using C for date/time parsing is usually up to 10x faster. NSDateFormatter is a slow dog.