how to get only date from string? - ios4

how to get only date from datetime date value
my code is:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"yyyy-MM-dd"];
[dateFormat setDateStyle:NSDateFormatterShortStyle];
lblDateAvailable.text = [dateFormat stringFromDate:[datepick date]];
NSDate *date=[dateFormat dateFromString:lblDateAvailable.text];
NSLog(#"%#",date);
result=2012-08-17 18:30:00 +0000
i want to get only date from string.so plz suggest me.

Convert Date into string and using this method Separated the component and pass the Separated value in your label.
NSArray* components = [yourdatestring componentsSeparatedByString:#" "];

Related

how to convert date to string like this "2013-12-23T12:02:01+05:30"

I have string "2013-12-23T12:02:01+05:30"
i want to convert into date but i am getting NSDate nil
here is my code
// Convert string to date object
NSString *dateStr = #"2013-12-23T12:02:01+05:30";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"yyyy, MM DD 'T' HH:mm:ss Z"];
NSDate *date = [dateFormat dateFromString:dateStr];
Your string format does not match you date string:
NSString *dateStr = #"2013-12-23T12:02:01+05:30";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate *date = [dateFormat dateFromString:dateStr];
In you example date sting there are - used in the date, in the format you are using uses . Also DD will give you the day in the year not in the month. and there is no space after the seconds and time zone offset.
You need to set the correct date format to match with the date string
NSString *dateStr = #"2013-12-23T12:02:01+05:30";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate *date = [dateFormat dateFromString:dateStr];

Formatting Date from server time to local time using NSTimeZone and Dateformatter

I am receiving a date/time as a NSString from my server where I am converting that time into a NSDate to the users local time using NSTimeZone. After which I try to reformat this NSDate into a better more readable NSString using the new NSDateFormatter format, however when I try to apply this new format it reverts the resulting dateString back to the original Server time.
I would like to know what I am doing wrong, I would like to show the converted time in the new format.
this is the code I am using
// set date format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = #"yyyy-MM-dd HH:mm:ss";
// change time to systemTimeZone
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
[dateFormatter setTimeZone:timeZone];
NSDate *localTime = [dateFormatter dateFromString:[singleInstanceActivationHistoryDictionay objectForKey:#"ActivationTime"]];
// reformat converted Time to readable format
NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
[dateFormat1 setDateFormat:#"dd/MM/yy - hh:mm a"];
NSString *dateWithNewFormat = [dateFormat1 stringFromDate:localTime];
NSLog(#"TimeZone - %#", timeZone);
NSLog(#"UTC ServerTime - %#", [singleInstanceActivationHistoryDictionay objectForKey:#"ActivationTime"]);
NSLog(#"UTC to deviceTimeZone - %#", localTime);
NSLog(#"NewFormat - %#", dateWithNewFormat);
This is an example of my output
TimeZone - Pacific/Auckland (NZST) offset 43200
UTC ServerTime - 2013-08-22 01:45:59
UTC to deviceTimeZone - 2013-08-21 13:45:59 +0000
NewFormat - 22/08/13 - 01:45 AM
any help would be greatly appreciated
The NSDateFormatter that reads the date must be set to the timezone that the date you are parsing is in, in your case, it is UTC. The date formatter will then be able to produce an NSDate object (which represents a specific moment in time regardless of timezones). You can then give that NSDate object to another NSDateFormatter that is configured to format dates in a specific time zone.
// set date format
NSDateFormatter *dateParser = [[NSDateFormatter alloc] init];
dateParser.dateFormat = #"yyyy-MM-dd HH:mm:ss";
dateParser.timeZone = [NSTimeZone timeZoneWithName:#"UTC"];
NSDate *specificMomentInTime = [dateParser dateFromString:[singleInstanceActivationHistoryDictionay objectForKey:#"ActivationTime"]];
// reformat converted Time to readable format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = #"dd/MM/yy - hh:mm a";
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
NSString *dateWithNewFormat = [dateFormatter stringFromDate:specificMomentInTime];
NSLog(#"UTC ServerTime - %#", specificMomentInTime);
NSLog(#"NewFormat - %#", dateWithNewFormat);

I cannot convert this datetime string from Django to iOS NSDate

I am getting NSString 2012-08-17T10:56:45.508205 as time from Django API.
I am trying to convert that string into NSDate object with this code:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:#"UTC"];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSDate *date = [dateFormatter dateFromString:stringToConvert];
But date object is null. Where am I going wrong?
The ISO8601 string you're getting from the Django API (2012-08-17T10:56:45.508205) does not include a time zone component. However, you are including that field symbol (Z) in your format string. Just remove that and it should work fine.
[dateFormatter setDateFormat:#"yyyy-MM-dd'T'HH:mm:ss.SSS"];
See the Unicode Technical Reference for more information on the formatting codes:

NSDateFormatter Convert String To Date Always Military Time

I have a string which represents a date stored in military time. I want to display this string in a label in 12 hr time. Here is my code snippet:
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:timeZone];
[dateFormat setDateFormat:#"MM/dd/yyyy hh:mm:ss"];
NSLog(#"Current Date: %#", [dateFormat stringFromDate:[NSDate date]]);
NSLog(#"Sent date: %#",[myPlanData valueForKey:#"planDate"]);
NSDate *aDate =[dateFormat dateFromString:[myPlanData valueForKey:#"planDate"]];
NSLog(#"Converted date is: %#",aDate);
NSString *planDateString = [dateFormat stringFromDate:aDate];
NSLog(#"The converted date string is: %#",planDateString);
planDateLabel.text=planDateString;
The output is:
Current Date: 06/28/2012 10:08:48 - (so my date formatter appears correct?)
Sent date: 06/30/2012 20:47:34 - (this is the value being sent)
Converted date is: (null) - (Here is where it breaks!)
The converted date string is: (null)
If i change my dateformat to
[dateFormat setDateFormat:#"MM/dd/yyyy HH:mm:ss"];
Everything goes smooth but I end up with Military time being displayed. I simply want to convet that to 12 hr time and display in a label
Well here is how i ended up fixing it
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:timeZone];
[dateFormat setDateFormat:#"MM/dd/yyyy HH:mm:ss"];
NSDateFormatter *dateFormatback = [[NSDateFormatter alloc] init];
[dateFormatback setTimeZone:timeZone];
[dateFormatback setDateFormat:#"MM/dd/yyyy hh:mm:ss a"];
NSLog(#"Current Date: %#", [dateFormat stringFromDate:[NSDate date]]);
NSLog(#"Sent date: %#",[myPlanData valueForKey:#"planDate"]);
NSDate *aDate =[dateFormat dateFromString:[myPlanData valueForKey:#"planDate"]];
NSLog(#"Converted date is: %#",aDate);
NSString *planDateString = [dateFormatback stringFromDate:aDate];
NSLog(#"The converted date string is: %#",planDateString);
planDateLabel.text=planDateString;
Not sure if this is the best or right way to do it but it works!

NSDateFormatter gives different output/wrong (GMT?) time

I have tried setting the timezone and locale of the NSDateFormatter but I can't seem to get anything to work. Here is the code
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"MM/dd/yyyy hh:mm:ss"];
NSString *myFireDateString=[#"9/17/11" stringByAppendingString:#" 09:00:00"];
NSDate *myFireDate = [dateFormat dateFromString:myFireDateString];
NSLog(#"The datestring is is %#",myFireDateString);
NSLog(#"The formatted date is %#",myFireDate);
Here is the output:
The datestring is is 9/17/11 09:00:00
The formatted date is 2011-09-17 13:00:00
You need to set a timezone to your dateFormatter:
[dateFormatter setTimeZone:[NSTimeZone defaultTimeZone];
See NSDate from NSString , shows the previous day

Resources