在Objective-C中工作,我有一個方法來正確格式化從數據庫中獲得的日期。 數據庫返回沒有時區信息的日期和時間。例如'2016-06-07T09:29:50.253'。問題NSDateFormatter意外調整時間
問題是,它正確地獲取日期,然後將其返回一個小時。在我09:29的時候,我最終會在08:29結束。
我現在正在與BST合作。
我有以下代碼:
+(NSDate *)getDate:(NSString *)date {
//Gets the date
date = [date stringByReplacingOccurrencesOfString:@"T" withString:@" "];
date = [date componentsSeparatedByString: @"."][0];
//Formats the date
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//This line is the one that fixes it.
[formatter setTimeZone: [NSTimeZone timeZoneWithName:@"UTC"]];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *returnDate = [formatter dateFromString:date];
return returnDate;
}
我做了一些谷歌搜索,發現已增加以下行解決了這個問題。
[formatter setTimeZone: [NSTimeZone timeZoneWithName:@"UTC"]];
這是罰款,暫時的,但我擔心它會在夏令時再次突破,我完全不知道爲什麼這個修復它。我也希望能夠讓它適應不同的時區,但至今還沒有運氣。
更多信息:
-The日來自SQL Server中的GETDATE()調用。我對此的理解是,它是按照現在的日期,不理解時區。如果我做了選擇調用,我得到的結果是:「2016-06-07T09:29:50.253」
爲了形式化的問題: 爲什麼會在上面的代碼進行調整的returnDate?
UTC是一個標準,而不是一個時區。爲此使用GMT。更多信息 - http://www.timeanddate.com/time/aboututc.html – Andriy
請在08:29添加「結束」。你怎麼看日期?日期如何存儲在數據庫中 - 在某個時間點,時區將被聲明或已經被約定。 – jrturton
爲什麼要刪除'T'和'.'後面的內容。將它們添加到日期格式。 – Larme