在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