I have some problems with converting a rss pubdate string into a NSDate object.
<pubDate>Fri, 09 Sep 2011 15:26:08 +0200</pubDate>
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, d MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:currentDate];
NSLog(#"DateObject : '%#'", date);
[dateFormatter release];
I always get
[44157:10d03] DateObject : '(null)'
You'll need:
dd instead of d, since the day is zero-padded
ZZ instead of Z, since it doesn't include the timezone abbreviated name
More info: http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns
When I run this:
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str = #"Fri, 09 Sep 2011 15:26:08 +0200";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"DateObject : %#", date);
[dateFormatter release];
[pool drain];
return 0;
}
I get this:
EmptyFoundation[19926:407] DateObject : 2011-09-09 13:26:08 +0000
First you could try the following code:
NSString *str = #"Mon, 19 Oct 2015 14:27:28 +0800";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"DateObject : %#", date);
However, If your DateObject is still null , your locale is not correctly located "en_US_POSIX" format. You need change your locale.
NSString *str = #"Mon, 19 Oct 2015 14:27:28 +0800";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:#"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"DateObject : %#", date);
The result is:
DateObject : 2015-10-19 06:27:28 +0000
Use :
NSArray *array=[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
to split the pubDate by whitespaces and newline and then get every element you want to show by using the indexes of the array.
I use this code to format Wordpress RSS feed dates:
+ (NSDate *)parseWordpressDate:(NSString *)dataWp {
NSArray *array=[dataWp componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//Tue, 04 Mar 2014 11:00:36 +0000
//day = index 1, month = 2, year = 3
NSString *yyear = [array objectAtIndex:3];
NSString *mmonth = [array objectAtIndex:2];
NSString *dday = [array objectAtIndex:1];
NSDateFormatter *dateFormatterGMTAware = [[NSDateFormatter alloc] init];
[dateFormatterGMTAware setDateFormat:#"yyyy-MMM-dd"];
NSString *dateString = [NSString stringWithFormat:#"%#-%#-%#",yyear,mmonth,dday];
NSDate *data = [dateFormatterGMTAware dateFromString:dateString];
return data;
}
Related
I have date string like this "11 June, 2019 16:35:21". When I try to convert the string to NSDate it returns nil.
NSString str =#"11 June, 2019 16:35:21";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat: #"dd MMM yyyy"];
NSDate *date = [formatter dateFromString:str];
NSString *string = [[formatter stringFromDate:date] uppercaseString];
Is there any other way to convert it? Or where I'm doing wrong?
use date format as like
NSString str =#"11 June, 2019 16:35:21";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc]
initWithLocaleIdentifier:#"en_US_POSIX"];
[formatter setLocale:locale];
// input dateformat #"11 June, 2019 16:35:21";
[formatter setDateFormat: #"dd MMMM, yyyy HH:mm:ss"];
NSDate *date = [formatter dateFromString:str];
// output dateformat for e.g #"11 Jun 2019
[formatter setDateFormat: #"dd MMM yyyy"];
NSString *string = [[formatter stringFromDate:date] uppercaseString];
The NSDateFormatter uses Unicode Technical Standard.
this site has a great documentation:
Date_Format_Patterns
e.g. "11 June, 2019 16:35:21" can be parsed with:
[dateFormatter setDateFormat:#"dd MMMM, yyyy HH:mm:ss"]
Karthik is right, first, you have to convert date string with #"dd MMMM, yyyy HH:mm:ss" format to NSDate, then convert it to your desired format #"dd MMM yyyy".
Hope so following code'll work.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc]
initWithLocaleIdentifier:#"en_US_POSIX"];
[formatter setLocale:locale];
[formatter setDateFormat: #"dd MMMM, yyyy HH:mm:ss"];
NSString *str = #"11 June, 2019 16:35:21";
NSDate *date = [formatter dateFromString:str];
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat: #"dd MMM yyyy"];
NSString *string = [[formatter stringFromDate:date] uppercaseString];
I have a string in the format "3 Dec 2012 1:00PM" and I need to parse out date and time so that I can get "3 Dec 2012" and "1:00PM" in separate NSStrings. How would I do that?
NSString *strInput = #"3 Dec 2012 1:00PM";
static NSString *format = #"dd MMM yyyy hh:mma";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:#"GMT"]];
[dateFormatter setDateFormat:format];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:#"en_US"];
[dateFormatter setLocale:usLocale];
NSDate *date = [dateFormatter dateFromString:strInput];
static NSString *format1 = #"dd MMM yyyy";
[dateFormatter setDateFormat:format1];
NSString *strDatePart1 = [dateFormatter stringFromDate:date]; // gives 3 Dec 2012
static NSString *format2 = #"hh:mma";
[dateFormatter setDateFormat:format2];
NSString *strDatePart2 = [dateFormatter stringFromDate:date]; // gives 1:00PM
The easiest (and fastest) way for this issue is to use it as string without date formatter:
NSArray* components = [fullDateTime componentsSeparatedByString:#" "];
NSString* date = [NSString stringWithFormat:#"%#%#%#", [components objectAtIndex:0], [components objectAtIndex:1], [components objectAtIndex:2]];
NSString* time = [components objectAtIndex:3];
Try this...this may help you..
NSDateFormatter *formatOld = [[NSDateFormatter alloc] init];
[formatOld setDateFormat:#"dd MMM yyyy hh:mma"]; //3 Dec 2012 1:00PM
NSString *oldDate = #"3 Dec 2012 1:00PM";
NSDate *date = [formatOld dateFromString:oldDate];
NSDateFormatter *newFormate = [[NSDateFormatter alloc]init];
[newFormate setDateFormat:#"dd MMM yyyy 'and' hh:mm a"]; //3 Dec 2012" and "1:00PM
NSString *newdate =[newFormate stringFromDate:date];
NSLog(#"%#",newdate);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"dd MMM YYYY"];
NSDate *date = [NSDate date];
//in your case you have a string in place of date. I have made it generalised.
//if you have string
NSString *onlyDate = [dateFormatter stringFromDate:date];
NSLog(#"Date: %# ", onlyDate);
[dateFormatter setDateFormat:#"hh:mm a"];
NSString *onlyTime=[dateFormatter stringFromDate:date];
NSLog(#"Time: %# ", onlyTime);
Outputs
Date: 27 Nov 2012
Time: 02:43 PM
NSString* dateString = #"3 Dec 2012 1:00PM";
- (int) indexOf:(NSString*)source of:(NSString *)text {
NSRange range = [source rangeOfString:text];
if ( range.length > 0 ) {
return range.location;
} else {
return -1;
}
}
-(void)dostrip{
NSString* date = [dateString substringToIndex:[self indexOf:#":"]];
NSLog(#"date: %#", date);
NSString* hour = [dateString substringFromIndex:[self indexOf:#":"]];
NSLog(#"hour: %#", hour);
}
`
I've a date picker associated with a text field.Text field has value like this Thursday, November 22nd(string recieved from server call).
Now i want that when i click on text field date picker should sow default date that is displayed in text field.
I guess i've to call [datePicker setDate:date animated:YES]; but problem is that how to convert string Thursday, November 22nd into NSDate?
Thanks in advance.
I assume u would like current year in your date:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"yyyy"];
NSString *yeardate = [dateFormat stringFromDate:[NSDate date]];
NSString *string = #"Thursday, November 22nd";
if ( [string length] > 0)
string = [string substringToIndex:[string length] - 2];
NSString *finalstr = [NSString stringWithFormat:#"%# %#",string,yeardate];
[dateFormat setDateFormat:#"EEEE,MMMM dd yyyy"];
NSDate *date = [dateFormat dateFromString:finalstr];
NSLog(#"%#",date);
You can follow the code snippet below
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"EEEE MMMM d, yyyy"];
NSString *dateStr;
NSDate *date;
date = [NSDate date];
dateStr= [formatter stringFromDate:date];
NSLog(#"%#", dateStr); // -> Tuesday November 6, 2012
dateStr= #"Tuesday November 6, 2012";
date = [formatter dateFromString:dateStr];
NSLog(#"%#",date); // -> 2012-11-05 18:15:00 +0000
Good day, I'm trying to convert NSString that I'm getting from the server to NSDate object.
That is the code:
NSString *date = #"Sep 12 at 12:03 am";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"MMM d 'at' H:m a"];
self.messageDateAndTime = [dateFormatter dateFromString:date];
NSLog(#"NSDate: %#", self.messageDateAndTime);
I'm getting date in the format that date string has. After I'm trying to create my own formatter for this date format. But anyway, I'm getting null! What I'm doing wrong?
I debug you above code its running fine and giving NSDate: 1970-09-11 18:33:00 +0000 this log. Check for you string first. For more you can use the category below.
// NSString+Date.h
#interface NSString (Date)
+ (NSDate*)stringDateFromString:(NSString*)string;
+ (NSString*)stringDateFromDate:(NSDate*)date;
#end
// NSString+Date.m
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
NSDate *date = [dateFormatter dateFromString:stringDate ];
[dateFormatter release];
+ (NSDateFormatter*)stringDateFormatter
{
static NSDateFormatter* formatter = nil;
if (formatter == nil)
{
formatter = [NSDateFormatter alloc] init];
[formatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
}
return formatter;
}
+ (NSDate*)stringDateFromString:(NSString*)string
{
return [[NSString stringDateFormatter] dateFromString:string];
}
+ (NSString*)stringDateFromDate:(NSDate*)date
{
return [[NSString stringDateFormatter] stringFromDate:date];
}
// Usage (#import "NSString+Date.h")
NSString* string = [NSString stringDateFromDate:[NSDate date]];
NSDate* date = [NSString stringDateFromString:string];
Please find the correct NSDateFormatter formatting string here.
I found the solution my self, it would return null until you set the locale yourself. This is the code:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:#"en_US"];
[dateFormatter setLocale:usLocale];
[dateFormatter setDateFormat:#"MMM d 'at' H:m a"];
self.messageDateAndTime =[dateFormatter dateFromString:messageDate];
I have a NSString that I want to load into a NSDate. The string looks like: 21/10/2011 5:42:02 PM
What I have written is:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"d/M/yyyy h:mm:ss a"];
NSDate *date = [dateFormat dateFromString:dateString];
The date ends up with a null value.
There is obviously something wrong with the date formatter but I am not sure what.
Any help would be greatly appreciated.
If the string doesn't match the format, then it will return null.
For example, here's an example that matches the format and one that doesn't:
NSString *dateString = #"11/09/2011 12:22:02";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"d/M/yyyy h:mm:ss"];
NSDate *date = [dateFormat dateFromString:dateString];
NSLog(#"dateString; %#", date);
NSString *dateString2 = #"2011-11-09 12:22:02 +0000";
NSDate *date2 = [dateFormat2 dateFromString:dateString2];
NSLog(#"dateString; %#", date2);
This outputs:
2011-11-09 07:27:54.342 Craplet[45608:707] dateString; 2011-09-11 05:22:02 +0000
2011-11-09 07:27:54.343 Craplet[45608:707] dateString; (null)