...been对此进行了数小时的研究--只是变得越来越困惑!
我在美国东海岸。
我的数据库是由一台似乎位于西海岸的服务器托管的。
我可以告诉您这一点,因为当我在上午9:45(也就是东海岸时间)将新数据插入数据库时,当我直接查看服务器上的MySQL表时,它会显示数据是在早上6:45插入的。
问题是,当我的应用程序从服务器读取该日期并将其与自己最后节省的时间进行比较时,最后节省的时间总是比服务器上一次更新时间晚。
因此,我插入到服务器中的任何新数据都会自动被忽略,因为它注册为旧数据(3小时)。(确切地说是老了。)
我尝试过各种转换,使用NSDateFormatter
,NSTimeZone
,NSLocale
--以及它们的各种组合,我得到的意大利面条味精汤根本不起作用。
以下是我的一些代码:
PHP代码--在将新数据插入MySQL数据库时使用:
// Declare a var for the date of insertion into the Database:
$storeItemDateAdded = date('Y-m-d H:i:s');
...
// Insert the new data into the database:
$stmt = $mysqli->prepare("INSERT INTO StoreTable (Name, Price, DateAdded)
VALUES ('". $newStoreItemName ."', '". $newStoreItemPrice ."', '".$storeItemDateAdded."');");
目标-C代码
(注:
进入应用程序的-The JSON对象(NSDictionary)以以下格式显示日期:2015-03-29 06:45:30
-因此,我将JSON的这个特定部分存储在一个名为NSString
var的remoteDBStoreLastUpdateDate
中)
// Convert this String to an actual NSDate Object:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *liveStoreActualUpdateNSDate = [dateFormat dateFromString:remoteDBStoreLastUpdateDate];
// Now compare the Saved date and this new Remote date:
if ([storeSavedLastUpdateNSDate compare:liveStoreActualUpdateNSDate] == NSOrderedAscending) {
NSLog(@"Need to get FRESH STORE DATA!");
[self getNewData];
}
else {
NSLog(@"STORE is up to date!");
[self useSavedData];
}
所以就像我说的,这个测试产生了错误的结果--但不是因为代码/逻辑错误,而是因为我比较的NSDate
对象来自不同的时区。
那么,我怎样才能让他们处于同一时区,并做出真实有效的比较呢?
发布于 2015-03-29 15:28:16
PHP语句
$storeItemDateAdded = date('Y-m-d H:i:s');
正在使用服务器时间。函数格式化本地日期和时间,并返回格式化的日期字符串。
然后
$stmt = $mysqli->prepare("INSERT INTO StoreTable (Name, Price, DateAdded) VALUES ('". $newStoreItemName ."', '". $newStoreItemPrice ."', '".$storeItemDateAdded."');");
在数据库中插入服务器本地日期/时间,而不是发送到服务器的日期/时间。
将日期/时间发送到服务器,不要依赖服务器的本地时间。或者在所有系统上使用UTC时间,这是默认的NSDate内部存储。或将时区偏移量添加到时间字符串表示形式中。
将时间发送到服务器意味着获得iOS设备上的时间,正确格式化并将其与所发送的数据一起发送到服务器。然后在服务器上使用从应用程序接收到的时间作为MySQL语句中的时间。
https://stackoverflow.com/questions/29330682
复制相似问题