I always have trouble with this, and keep seem to find a good resource to learn this exhaustively. I am trying to use the date formatter in Xcode objective C, but I am not setting the date format correctly. Here is my data:
Fri, 27 Jun 2014 12:33:18 +0000
Can someone assist me or point me in the right direction? Trying the below code, but it is not working.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:#"en_US"]];
[dateFormatter setDateFormat:#"EEE, d LLL yyyy HH:mm:ss Z"];
Update: the format below might help, as it shows some zero padding on the day.
Wed, 02 Jul 2014 11:47:35 +0000
According to the Unicode Technical Standard #35, "LLL" is the date format for a "stand-alone month" which is "a month name without an associated day number".
You should use "MMM" instead:
[dateFormatter setDateFormat:#"EEE, d MMM yyyy HH:mm:ss Z"];
Example:
NSString *str = #"Fri, 27 Jun 2014 12:33:18 +0000";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:#"en_US"]];
[dateFormatter setDateFormat:#"EEE, d MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"%#", date);
// Output: 2014-06-27 12:33:18 +0000
Related
I created a NSDateFormatter but sometimes it creates an NSDate out of a given string sometimes it doesn't on the same device (Simulator).
This is my code:
NSString *lastModifiedString = [metaData objectForKey:#"Last-Modified"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy hh:mm:ss Z"];
NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString];
For Example for the string
"Fri, 09 Jan 2015 15:08:01 GMT" it returns nil but for "Fri, 12 Dec 2014 09:15:52 GMT" it returns the right NSDate.
I tried to add parenthesis to the dateformat and I tried to set locale to "en_US_POSIX" and i tried a little z instead of a big one but neither of it worked.
What am I doing wrong? Thanks for your help.
NSDateFormatter follows the Unicode standard for date and time patterns. Use 'H' for the hour on a 24-hour clock:
So in your code, the correct way should be:
NSString *lastModifiedString = [metaData objectForKey:#"Last-Modified"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString];
I am trying to create a date out of my date string that goes:
Tue, 29 Jul 2014 17:22:30 +0200
I am using this code but it still gives me null as I try to dateFromString
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd LLL YYYY hh:mm:ss +0200"];
NSLog(#"The date: %#", [dateFormatter dateFromString:bazosItem.itemDate]);
so the output is:
The date: (null)
I have been searching for the right dateFormat in the internet and have rechecked it multiple times and I have no idea what is going wrong with the date.
There are some mistakes in your format, first the YYYY should be yyyy second the hh is for AM/PM hour not 24 hours for this you should use HH.
Third and most important you should the the date format in which language the date is by adding a locale:
NSString *temp = #"Tue, 29 Jul 2014 17:22:30 +0200";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:#"en_US_POSIX"];
[dateFormatter setDateFormat:#"EEE, dd LLL yyyy HH:mm:ss +0200"];
NSLog(#"The date: %#", [dateFormatter dateFromString:temp]);
Your date format seems to be incorrect. Try the following
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss +0200"];
I have an array that contains some date strings. I'm using NSDateFormatter but the problem is that it recognizes some of the dates and do not recognize others while all of them have the same format!
for example it formats: Sat, 01 Feb 2014 08:44:00 +0430
But returns null for: Wed, 29 Jan 2014 17:40:00 +0430
this is the code i used:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"EEE, dd MMM yyyy hh:mm:ss xx"];
NSDate *date = [dateFormat dateFromString:dateInput];
Use this date format [dateFormat setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss xx"];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss xx"];
NSDate *date = [dateFormat dateFromString:dateInput];
Note:
HH is denoted by 24 hour format
hh is is denoted by 12 hour format
Try this
[dateFormat setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss xx"];
Because, HH is syntax for 24 hour format which is suitable for your criteria.
A server is sending a date in this format: "Fri Dec 13 2013 16:26:18 GMT+0000 (UTC)" but I can't get it to parse using NSDateFormatter
If I do this this then it parses:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE MMM dd yyyy HH:mm:ss"];
NSDate *date = [dateFormatter dateFromString:#"Fri Dec 13 2013 16:26:18"];
However I need this:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE MMM dd yyyy HH:mm:ss XXX"];
NSDate *date = [dateFormatter dateFromString:#"Fri Dec 13 2013 16:26:18 GMT+0000 (UTC)"];
I've tried a few things for XXX such as z or Z but everything results in a nil date.
Having a date string with two separate timezone specifications is strange. It may work with:
EEE MMM dd yyyy HH:mm:ss zZ (z)
If the part in the parentheses will always be UTC then I would do:
EEE MMM dd yyyy HH:mm:ss zZ '(UTC)'
or maybe:
EEE MMM dd yyyy HH:mm:ss 'GMT'Z '(UTC)'
I am getting date string form mail server like this. Thu, 31 Dec 2009 14:32:15 +0580.
I want to convert this date string to date.
Here's my code:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *inputstring=#"Mon, 3 sep 2012 08:32:39 +0580";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
[dateFormatter setLenient:YES];
NSLocale *enUS = [[NSLocale alloc]initWithLocaleIdentifier:#"en_US"];
[dateFormatter setLocale:enUS];
NSDate *result = [dateFormatter dateFromString:inputstring];
NSLog(#"test==%#",result);
}
I am getting output null.
Excepted Output : 2012-09-03 03:02:39 +0000
First problem: You are not trying to read the "Tue" on the string. (Add "EEE, " to the front of your format)
Second and bigger problem: +0580 is not a valid time zone. There was a PHP bug a few years ago that mistakenly returned IST (+0530) as +0580. +0580 makes no sense. It means 5 hours and 80 minutes. So you can do one of two things: Either replace +0580 with +0530 before you process it or set the date formatter time zone to be IST and remove the +0580 from the string.
I see you accepted another answer, but that answer "works" because it fails to parse the final part and ignores the time zone. I ran it and got 2013-07-09 08:32:38 +0000 (Which is not the same as 2013-07-09 08:32:39 +0580)
Removing the + in the accepted answer's format causes the formatter to parse correctly, but you will get null because the timezone is invalid. Changing the time zone to +0530 gives the expected result of 2013-07-09 03:02:39 +0000
Replace
[dateFormatter setDateFormat:#"d MMM yyyy HH:mm:ss ZZZ"];
with
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy hh:mm:ss zzzz"];
Just copy and paste the below code in your project and run, see the result
NSString *dateString = #"Tue, 9 Jul 2013 08:32:39 +0580";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MM yyyy hh:mm:ss +zzzz"];
NSDate *dateFromString;
dateFromString = [dateFormatter dateFromString:dateString];
NSLog(#"test==%#",dateFromString);
#Raviteja Kammila use following code for date format like 2013-07-09 03:02:39 +0000
NSString *dateString = #"Tue, 9 Jul 2013 08:32:39 +0580";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MM yyyy HH:mm:ss +zzzz"];
NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(#"final date : %#",date);