我有一個函數,根據用戶的位置生成當前日期。即使在英國的夏令時發生變化之後,這也能提供正確的日期和時間。NSDateformatter夏時制後不正確的時間
但是當我嘗試創建它似乎對我多加一個小時的日期字符串...
存儲在Coredata例如,日期是2013年1月3日卻在12:00轉化爲字符串顯示爲1/3/2013 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];
甚至一年較小? –
DateFormatter不能通過@「dd」找到,因爲你有'NSDateComponent'' [comp date]'會給你當前的日期。 –
剛剛更新。組件給我同樣的問題。它就像格式化程序正在增加一小時......(它只是在時鐘改變後纔出現) – Dan