Im trying to convert a String without timezone value like "31.05.2015" to NSDate.
Whats wrong with my DateFormatter? It returns the date 2015-05-31 22:00:00 +0000 and when I try to print it with the same formatter it prints: 01.06.2015
-(NSDateFormatter*) dateFormatter{
if(!_dateFormatter){
_dateFormatter = [[NSDateFormatter alloc]init];
[_dateAndTimeFormatter setDateFormat:@"dd.MM.yyyy"];
[_dateAndTimeFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CEST"]];
_dateFormatter.dateStyle = NSDateFormatterShortStyle;
_dateFormatter.timeStyle = NSDateFormatterNoStyle;
}
return _dateFormatter;
}
EDIT
I updated it to
-(NSDateFormatter*) dateAndTimeFormatter{
if(!_dateAndTimeFormatter){
_dateAndTimeFormatter = [[NSDateFormatter alloc]init];
[_dateAndTimeFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS Z"];
_dateAndTimeFormatter.dateStyle = NSDateFormatterShortStyle;
_dateAndTimeFormatter.timeStyle = NSDateFormatterShortStyle;
}
return _dateAndTimeFormatter;
}
and call it with
NSDate *startDate = [self.dateFormatter dateFromString:@"31.05.2015"];
self.beginningValueLabel.text = [self.dateFormatter stringFromDate:startDate];
The result still is 01.06.2015.
startDate is 2015-05-31 22:00:00 +0000
When you use
[NSDateFormatter setTimeZone:]
the formatter will adjust the date for display based on that new timezone, so it's adding the timezone offset to the date before formatting it for display.The NSDateFormatter defaults to the timezone of the device, so it would have had the same effect as setting the timezone manually. Tell the DateFormatter to use the same timezone as the date (+0000).