【问题标题】:Getting a (null) result when attempting to format NSDate from MySQL datetime string尝试从 MySQL 日期时间字符串格式化 NSDate 时获得(空)结果
【发布时间】:2014-05-20 17:34:13
【问题描述】:

我有以下代码:

- (NSString *)
  lastSeenDateString:(NSString *)dateString
{
  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
  [dateFormatter setDateFormat:@"yyyy-MM-ddTHH:mm:ssZ"];
  NSDate *date = [dateFormatter dateFromString:dateString];

  NSString *result = [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle];

  return result;
}

dateString 变量看起来像这样(我输出到日志以确保):2014-05-20T17:23:42.000Z

date 变量,当输出到日志时,显示:(null)

我尝试删除 setTimeZone 方法,将 setDateFormat 更改为许多不同的东西(“yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'” 、“yyyy-MM-dd HH:mm:ss”、“yyyy-MM-dd”等),但没有任何效果。无论我做什么,它都会返回 null。我查看了许多其他回答相同问题的 StackOverflow 问题,以及 Google 上的其他示例,我的代码似乎与公认的答案一致。然而,结果仍然是一个空的 NSDate 变量。

【问题讨论】:

  • 应该是“...:mm:ss.SSSZ”
  • 你真的应该学习如何自己解决这个问题。从 NSDateFormatter 的文档开始,您可以按照几个链接获取日期格式字符串的标准。研究那个文件。

标签: ios objective-c datetime nsdate nsdateformatter


【解决方案1】:

输入的格式不匹配。

 [dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSSZ" ];

【讨论】:

  • 单引号仅用于消除歧义。
  • 以上仅适用于文字 Z 时区。
  • 澄清一下,Naveen 修复了这个问题,因此它不再需要文字 Z 时区。
【解决方案2】:

您需要将T 放在单引号中,并且应该在格式字符串中包含毫秒SSS

您的日期字符串似乎是 RFC 3339 日期。正如Technical Q&A 1480 中所述,为确保您处理不同的国际日历设置,您需要在en_US_POSIX 语言环境中对其进行解析。

因此:

- (NSString *)lastSeenDateString:(NSString *)dateString
{
    NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

    // parse RFC 3339 date

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.locale = enUSPOSIXLocale;
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
    NSDate *date = [dateFormatter dateFromString:dateString];

    // switch back to current locale

    dateFormatter.locale = [NSLocale currentLocale];

    return [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多