Converting string to date iOS - ios

I have the following string:
01/27/2016 11:00:00
And I am passing it to this method:
-(NSDate*)dateFromString:(NSString*)dateString format:(NSString*)format {
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"MM/dd/yy, HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(#"%#", [dateFormatter dateFromString:strToConvert]);
}
and it is returning nil. Not sure what I am doing wrong here.
Edit:This only seems to be happening on the iPhone, on the iPad it functions fine.

Try this.
-(NSDate*)dateFromString:(NSString*)dateString format:(NSString*)format {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"MM/dd/yyyy HH:mm:ss"]; //01/27/2016 11:00:00
NSDate *date = [dateFormatter dateFromString:dateString];
return date;
}
Your code missing returning statement. I hope you would getting an error too.

Related

NSDateFormatter does not formate date correctly ios10

I am trying to convert date with specific formate and just wanted to get date from passed date as shown below but getting nil
What am I doing wrong?
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[dateFormatter setDateFormat:#"yyyy-MM-dd HH:mm:ss.SSS"];
NSDate *date = [dateFormatter dateFromString: [dicValues valueForKey:#"DateNeeded"]];
[dateFormatter setDateFormat:#"dd/MM/yyyy h:mm a"];
NSString *strSubTitle = [[NSString alloc] initWithFormat:#"%#", [dateFormatter stringFromDate:date]];
Date i am receiving is : 2016-11-17T23:46:50.35 , 2016-11-28T21:25:20.927 and 2016-11-29T00:00:00
You need to convert
[dateFormatter setDateFormat:#"yyyy-MM-dd HH:mm:ss"];
to this
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ss.SSS"];
As in your date string you are receiving MilliSeconds also
Edit
This code is working for me, check the date format which you are getting from server
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ss.SSS"];
NSDate *date = [dateFormatter dateFromString: #"2016-11-28T21:25:20.927"];
if (date == nil) {
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ss"];
date = [dateFormatter dateFromString: #"2016-11-28T21:25:20.927"];
}
[dateFormatter setDateFormat:#"dd/MM/yyyy h:mm a"];
NSString *strSubTitle = [[NSString alloc] initWithFormat:#"%#", [dateFormatter stringFromDate:date]];
[dicValues valueForKey: #"DateNeeded"] is either nil or does not match the specified format "yyyy-MM-dd HH:mm:ss".
First check that date you receive, is in yyyy-MM-dd HH:mm:ss format. If not then make this format according to date you received.
For Example, you received date 29/11/16, then your code will be like this
[dateFormatter setDateFormat:#"dd/MM/yy"];
NSDate *date = [dateFormatter dateFromString: [dicValues valueForKey:#"DateNeeded"]];
Once you get date, then convert it any format you want.
try
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ss.SSS"];

How to convert NSString to a date formattted string

I have string with value 01012016 which i want to show to user like 01-01-2016. For this, i am using the below code
-(NSString *)dateToFormatedDate:(NSString *)dateStr {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:#"en_US"]];
[dateFormatter setDateFormat:#"MM-dd-yyyy"];
NSDate *date = [dateFormatter dateFromString:dateStr];
NSLog(#"date is %#", [dateFormatter stringFromDate:date]);
return [dateFormatter stringFromDate:date];
}
But this method is always returning nil. I have tried on simulator and device both.
I am not able to figure it out what i did wrong here
The format of your NSDateFormatter does not match the string you're trying to pass it. Take a look at this related question...
Converting a string to an NSDate
What you want to do is set the NSDateFormatter to match the string, then once you've created an NSDate object from the string, change the NSDateFormatter to your desired output format. Something like this...
-(NSString *)dateToFormatedDate:(NSString *)dateStr {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:#"en_US"]];
[dateFormatter setDateFormat:#"MMddyyyy"];
NSDate *date = [dateFormatter dateFromString:dateStr];
[dateFormatter setDateFormat:#"MM-dd-yyyy"];
NSLog(#"date is %#", [dateFormatter stringFromDate:date]);
return [dateFormatter stringFromDate:date];
}

How to convert datetime string into NSDate in iOS?

I have datetime format like this
2015-10-06 12:39:12
when i try to convert into nsdate it return me null. i am using below code for it.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"yyyy-MM-dd HH:mm:ss Z"];
NSDate *date = [formatter dateFromString:user_post.modification_date];
Please tell me how can i convert it into correct NSDate?
dateString is your date in string format.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:#"GMT"]];
[dateFormatter setDateFormat:#"yyyy-MM-dd HH:mm:ss"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
Try to set like this
NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:#"YYYY-MM-dd HH:mm:ss"];
NSString *dateString = [dateFormatter stringFromDate:currDate];
Change this line only.
[formatter setDateFormat:#"yyyy-MM-dd HH:mm:ss"];
Z is the timeZone
I suggest you to set the timezone, can be the cause of the problem
[formatter setTimeZone:[NSTimeZone timeZoneWithName:#"GMT"]];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:#"en_US"]];

How to get NSDate in "dd/MM/yyyy" formate ios?

I am working with NSDate i created one function which give Today date with "dd/MM/yyyy" format but NSDate always show "nil" value. I googled lot and also see lots of stackoverflow answer but all answer return NSString value not NSDate value so please guide me to get NSDate with given format.
+(NSDate*)getCurrentDate{
NSDateFormatter *DateFormatter=[[NSDateFormatter alloc] init];
[DateFormatter setDateFormat:#"yyyy-MM-dd hh:mm:ss"];
//Date print here
NSLog(#"Utility CurrentDate: %#",[DateFormatter stringFromDate:[NSDate date]]);
NSString *dateString = [DateFormatter stringFromDate:[NSDate date]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDateFormatter *newDateFormatter = [[NSDateFormatter alloc]init];
[newDateFormatter setDateFormat:DATE_FORMAT];
//Date print here
NSLog(#"New Date: %#",[newDateFormatter stringFromDate:[NSDate date]]);
NSDate *dateFromString = [newDateFormatter dateFromString:dateString];
return dateFromString;
}
The issue is here
NSDate *dateFromString = [newDateFormatter dateFromString:dateString];
Here your dateString is 2014-12-11 03:41:31, hence it is not getting formatted. You should change either newDateFormatter or DateFormatter to convert as per your requirement.
EDIT:
Replace [DateFormatter setDateFormat:#"yyyy-MM-dd hh:mm:ss"]; with [DateFormatter setDateFormat: DATE_FORMAT];
But your return date will not be in the desired way, since you are returning an NSDate Object. You should return a formatted string.
You are completely misunderstanding what NSDate is and does. An NSDate is an absolute point in time. It has no format. It cannot have a format. It is absolutely impossible to have an NSDate in "dd/MM/yyyy" format or in any other format.
When you want to display a date to the user, you use NSDateFormatter to convert the NSDate into a string. In any format you like.
check here Convert date from string or you can use this methods to convert.
These all three functions you can use to format date values..
-(NSString*)getStringFromDate:(NSDate*)pDate withFormat:(NSString*)pDateFormat{
NSDateFormatter *dtFormatter = [[NSDateFormatter alloc] init];
[dtFormatter setDateFormat:pDateFormat];
[dtFormatter setLocale:[NSLocale systemLocale]];
return [dtFormatter stringFromDate:pDate];}
-(NSDate*)getDateFromString:(NSString*)pStrDate withFormat:(NSString*)pDateFormat{
NSDateFormatter *dtFormatter = [[NSDateFormatter alloc] init];
[dtFormatter setDateFormat:pDateFormat];
[dtFormatter setLocale:[NSLocale systemLocale]];
return [dtFormatter dateFromString:pStrDate];}
-(NSString*)dateStringFromString:(NSString *)dateToConver format:(NSString *)fromFormat toFormat:(NSString *)toFormat{
NSDate *date = [Helper getDateFromString:dateToConver withFormat:fromFormat];
return [Helper getStringFromDate:date withFormat:toFormat];}
Refer the below modified method in dd/MM/yyyy format:-
+(NSString*)getCurrentDate{
NSDateFormatter *format=[[NSDateFormatter alloc]init];
[format setDateFormat:#"yyyy-MM-dd HH:mm:ss ZZZ"];
NSString *currentDt=[format stringFromDate:[NSDate date]];
NSDate *dt=[format dateFromString:currentDt];
[format setDateFormat:#"dd/MM/yyy"];
return [format stringFromDate:dt];
}

NSDateFormatter returning Null

I have this method on an object:
- (NSString *)formattedScheduledOn
{
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:#"MM/dd/yyyy hh:mm"];
return [dateFormater stringFromDate:self.scheduledOn];
}
scheduledOn is an NSDate object. Showing it as a raw date yields something like: 2013-03-22T09:44:28-07:00
But I always get null from that method. Any ideas? Thanks!
Make sure your date is not nil.
Try the following code and see what you get in return
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:#"GMT"]];
[dateFormater setDateFormat:#"MM/dd/yyyy hh:mm"];
return [dateFormater stringFromDate:[NSDate date]];
If change you passing the date as string then you should set the format according to the date string passed.
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ssz"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:#"GMT"]];
Why not do something like this?
Set your datePicker to pick or whatever you want.
[pick addTarget:self action:#selector(updateDateLabel:) forControlEvents:UIControlEventValueChanged];
-(IBAction)updateDateLabel:(id)sender {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
dateLabel.text = [formatter stringFromDate:pick.date];
}

Resources