我有一个根据用户位置生成当前日期的函数。即使在英国的夏令时更改之后,这也能提供正确的日期和时间。
但是,当我尝试创建一个带有日期的字符串时,它似乎为我增加了一个额外的小时......
例如,存储在 Coredata 中的日期是 2013 年 1 月 3 日 12:00,但是当转换为字符串时,它显示为 2013 年 1 月 3 日 13:00。我对语言环境和时区所做的更改似乎并没有什么不同。
有什么想法可以解决这个问题吗?可能值得注意的是,我从未使用正确的时区创建日期时间的“本地日期”功能。
代码:
+(NSDate*)localDate{
NSDate* date = [NSDate date];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone localTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:date];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:date];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
return [NSDate dateWithTimeInterval:interval sinceDate:date];
}
格式化代码:
-(NSString*)dateWithTime{
NSDateFormatter*formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"dd"];
NSInteger day = [[formatter stringFromDate:self]integerValue];
NSInteger fullday = day;
NSString* strDay = @"";
if(day>29){
day = day - 30;
}
else if(day>19){
day = day - 20;
}
else if(day>9){
day = day - 10;
}
if(fullday ==11){
strDay = @"th";
}
else if(fullday ==12){
strDay = @"th";
}
else if(fullday ==13){
strDay = @"th";
}
else if(day == 1){
strDay = @"st";
}
else if(day ==2){
strDay = @"nd";
}
else if(day ==3){
strDay = @"rd";
}
else{
strDay = @"th";
}
[formatter setDateFormat:@"MMMM"];
NSString* month = [formatter stringFromDate:self];
[formatter setDateFormat:@"HH:mm"];
NSString* time = [formatter stringFromDate:self];
return [NSString stringWithFormat:@"%u%@ %@ %@ - %@",fullday,strDay,month,[self yearString],time];
}
编辑:即使 NSDateComponants 返回不正确的时间..
NSCalendar *gregorian = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self];