【问题标题】:How to convert MySQL datetime to NSDate?如何将 MySQL 日期时间转换为 NSDate?
【发布时间】:2014-06-24 23:48:34
【问题描述】:
MySQL 返回此日期时间:2014-05-07T16:58:44.000Z
如何,使用什么日期时间格式我可以创建 NSDate?
据我所知,但它不起作用:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
NSDate *date = [df dateFromString: valueStr];
【问题讨论】:
标签:
mysql
objective-c
nsdate
nsdateformatter
【解决方案1】:
您的格式字符串很接近,但您也想用SSS 指定毫秒:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
此外,您的日期字符串中的 Z 代表“Zulu”(即 GMT/UTC),因此您的 dateFormat 应使用不带引号的 Z 或 X,以便正确解析字符串的时区.此外,如果您从日期构建字符串,请确保相应地设置您的时区。您还想设置您的语言环境:
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = enUSPOSIXLocale;
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSX";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
更多信息请参见Technical Q&A QA1480。
您还可以使用较新的 NSISO8601DateFormatter,它可以让您摆脱一些杂草:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;