我试图从mySQL(运行在Apache上)将时间戳(yyyy-MM-dd HH:mm:ss)传递给iOS。目前,MySQL是设置到这个时区:iOS - 正确格式化MySQL(apache)和iOS(NSDate)之间的时间戳
default-time-zone='+00:00'
当我下通过这个时间戳到iOS,我使用此代码字符串转换为一个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;
}
这是一个输出mySQL时间戳2013-04-17 16:33:56:
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]];
但是,任何人都可以验证它会一直继续匹配,无论一年中的哪个时间? (即夏令时间等)
是的,这是我发布后不久的结论。你能证实这些时间总是正确匹配吗? (即不会因夏时制等原因而改变) – JimmyJammed
@JamesHickman我不太清楚夏令时。但这一直对我有效。如果您可以控制dateFormat,则可以将datezone格式的信息添加到dateFormat中,例如+0700或+0000,以获得更大的灵活性。这篇文章将是一个很好的指针http://stackoverflow.com/a/6866992/767730 – Anupdas
好吧,从我的收集看来,UTC不受任何夏令时或其他季节变化的影响。幸运的是,我只需要显示我应用中任意两个日期之间的时间差异,因此我不需要为每个时区显示确切的时间。 – JimmyJammed