我想将NSDate保存到MySQL字段。最好的类型是什么? DATE或TIMESTAMP?以及如何格式化我的NSDate发送它(到PHP脚本)并将其保存在我的领域?NSDate到MySQL日期
回答
你问了两个问题。
关于MySQL的DATETIME VS TIMESTAMP,看到Should I use field 'datetime' or 'timestamp'?
关于通过PHP从NSDate的获取到MySQL的
NSDate的是代表一个时间点的对象。要通过网络发送它,您需要将其序列化为某种格式(即将其转换为字符串)。最简单的方法是以yyyy-MM-dd HH:mm:ss
的格式输入,因为这是MySQL所需要的。
使用NSDateFormatter
将NSDate对象转换为该格式的字符串。确保将格式化程序时区设置为UTC,这样无论您的NSDate计算所在的设备/计算机的时区如何,您都可以获得一致的结果。然后通过网络发送给您的PHP脚本。
在PHP脚本中,您可以直接取值并将其保存到DATETIME列。
红利:确保使用预准备语句(PHP提供的PHP PDO库允许这样做),否则您将面临SQL注入的风险。
我在我的应用程序中做了同样的事情一次。我曾经将NSDate存储为字符串。但我在我的项目中使用了SQLite。但是将NSDate存储为字符串对我来说工作得很好。在获取数据时,再次将字符串转换为NSDate。这种方法也没什么好处,因为你总是以字符串格式获取数据,所以它很容易处理项目中的事情。
我会将它转换为日期时间格式(YYYY-MM-DD HH:MM:SS)。这样你就没有Unix时代问题或y38k问题。 Plus PHP可以很容易地使用这种格式。
首先创建的日期格式:
NSDateFormatter *gmtDateFormatter = [[NSDateFormatter alloc] init];
gmtDateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
gmtDateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
从NSDate
转换到MySQL兼容的日期字符串:
NSString *dateString = [gmtDateFormatter stringFromDate:aDate];
要转换回:
NSDate *date = [gmtDateFormatter dateFromString:aString];
我的问题,即MySQL返回这个日期时间:2014-05-07T16:58:44.000Z,所以在向后的方向上我需要其他格式,你知道我需要什么样的格式吗? –
的MySQL的新版本支持小数秒,所以这里是我的解决方案:
@implementation NSDate (MySQL)
//used to send a utc date to the server.
-(NSString*)yourprefix_MySQLString{
static NSDateFormatter *df = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
df = [[NSDateFormatter alloc] init];
// [df setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS"]; can't use this because three S's
// is the maximum and rest are 0, e.g. 1415986217.544384 with six S's becomes .544000
// so missing some of the fraction.
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[df setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
});
double d = [self timeIntervalSince1970];
d = d - floor(d); // extract fraction
d*=1000000; // convert to micros
d = round(d);
return [NSString stringWithFormat:@"%@.%06d", [df stringFromDate:self], (int)d];
}
@end
例子:
NSDate* d = [NSDate date];
NSLog(@"%@", d);
NSLog(@"%f", [d timeIntervalSince1970]);
NSLog(@"%@", [d yourprefix_MySQLString]);
输出:在2号线和3号线的部分
2014-11-14 17:47:33 +0000
1415987253.326594
2014-11-14 17:47:33.326594
通知完全匹配,这就是我想要的。
始终将自己的前缀放在类别中以防止与其他开发人员类别发生冲突。
- 1. 将转换日期从MySQL到NSDate
- 2. NSString日期到NSDate
- 3. 转换NSDate到日期
- 4. HTTP日期到NSDate的
- 5. 比较NSDate [NSDate日期]
- 6. 将mysql日期转换为NSDate
- 7. NSdate星期日重复日期
- 8. php日期到mysql日期
- 9. NSDate到RFC 2822日期格式
- 10. NSString到NSDate返回错误的日期
- 11. 使用NSDate到UILabel的当前日期
- 12. 解析EXIF日期字符串到NSDate
- 13. NSDate,比较两个日期
- 14. NSDate延迟日期变更
- 15. NSDate - 设置未来日期
- 16. 如何区分日/夜与[NSDate日期]?
- 17. PHP和MYSQL日期到期
- 18. mysql日期为mysql日期
- 19. 转换日期到MySQL日期格式
- 20. JavaScript日期掩码到MySQL日期
- 21. jQuery Datatables MySQL日期到PHP日期
- 22. MySQL将日期添加到日期
- 23. 选择日期到当前日期 - mysql
- 24. CloudKit,无法保存NSDate到日期/时间字段,“无效的日期”
- 25. 如何在[NSDate日期]当天00:00获得NSDate?
- 26. 比较NSDate与[NSDate日期]最快的方法?
- 27. 的NSDate从一个日期组件和从其他的NSDate
- 28. 某日期的NSDate格式化不是有效日期
- 29. 的NSDate:日期介于两个日期之间
- 30. 获得一个NSDate日期的日期从一个类别中
NSDate通常使用哪种格式? –
我可以将NSDate转换为格式化为我想要的字符串 – Pierre
这将回答您的问题的第一部分:[datetime vs timestamp?](http://stackoverflow.com/q/409286/808317) –