iOS – 正确格式化mySQL(apache)和iOS(NSDate)之间的时间戳
我正在尝试从mySQL(在apache上运行)将时间戳(yyyy-MM-dd HH:mm:ss)传递到iOS。 目前,mysql被设置为这个时区:
default-time-zone='+00:00'
当我将这个时间戳传递给iOS时,我使用这段代码将string转换为一个NSDate:
-(NSDate *)formatDateWithString:(NSString *)dateString{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate* date = [dateFormatter dateFromString:dateString]; NSLog(@"Formatted Timestamp: %@ - Original Timestamp: %@", date,dateString); return date; }
这是2013年4月17日16:33:56 mySQL时间戳的输出:
Formatted Timestamp: 2013-04-17 23:33:56 +0000 - Original Timestamp: 2013-04-17 16:33:56
为什么iOS添加7小时? (仅供参考 – 我位于加利福尼亚州的旧金山,所以我相信这与我的时区是PDT有关系,只是不知道为什么当我没有指定它的时候为什么要这样转换)。
在我的应用程序中使用最普遍的时间戳是非常重要的,因为我可能有世界各地的用户,不想大量转换。 我希望能够在MySQL中存储时间戳,然后比较存储的服务器时间戳和当前服务器时间戳之间的差异。 如果可能,我宁愿不必每次都需要使用Web请求来获取“服务器时间”。
UPDATE
通过将这一行代码添加到我的dateFormatter,似乎两次现在匹配正确:
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
然而,不pipe每年的哪个时间,任何人都可以validation它会一直保持相匹配吗? (即夏令时间等)
默认NSDateFormatter设置为localTimeZone。 由于你的dateString没有时区信息,它计算了到localTimeZone的时间。 如果您知道dateString的时区是UTC,那么您需要将其设置为dateFormatter。
NSDate代表绝对时间,表示可以改变时区,但它是一个独特的价值,它不会受到夏时制的影响。
-(NSDate *)formatDateWithString:(NSString *)dateString{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; NSDate* date = [dateFormatter dateFromString:dateString]; NSLog(@"Formatted Timestamp: %@ - Original Timestamp: %@", date,dateString); return date; }