如何将MySQL datetime转换为NSDate?

Ján*_*nos 2 mysql objective-c nsdate nsdateformatter

MySQL返回此日期时间:2014-05-07T16:58:44.000Z

如何使用datetime格式创建NSDate

我发现这一点,但它不起作用:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
NSDate *date = [df dateFromString: valueStr];
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 5

您的格式字符串已关闭,但您也想要指定毫秒SSS:

[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Run Code Online (Sandbox Code Playgroud)

此外,Z您的日期字符串代表"Zulu"(即GMT/UTC),因此您dateFormat应该使用ZX不使用引号,以便正确解析字符串的时区.此外,如果您要从日期构建字符串,请确保相应地设置您的时区.您还想设置您的语言环境:

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];
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅技术问答QA1480.


你也可以使用更新的NSISO8601DateFormatter,它可以让你从一些杂草中解脱出来:

NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;
Run Code Online (Sandbox Code Playgroud)