【问题标题】:Convert NSString back to NSDate将 NSString 转换回 NSDate
【发布时间】:2013-02-17 02:48:14
【问题描述】:

我正在使用NSDateFormatter 将当前日期转换为字符串(格式为:February 16, 2013)。如何将此字符串转换回 NSDate 对象?

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterLongStyle timeStyle:NSDateFormatterNoStyle];

问题似乎是写出了月份(February vs.02),而其他问题仅解释使用NSDateFormatterMM-dd-yyyy 等格式,我不相信这是可能在这里。我必须手动解析这个日期,将February 转换为02,然后从那里开始吗?

【问题讨论】:

    标签: ios objective-c cocoa-touch nsdate


    【解决方案1】:

    您可以使用同一个 NSDateFormatter 类的 dateFromString 来执行反向转换。 要使其工作,您需要定义 dateStyle,以便解析器知道应该如何解析文本字符串。对于您提供的日期样式,下面的代码将起作用:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    NSDate *date = [dateFormatter dateFromString:@"February 16, 2013"];
    
    NSLog(@"%@", date);
    

    【讨论】:

    • dateFromString 在传递February 16, 2013 等字符串时返回空对象。
    • 确保为解析器设置了正确的日期样式。下面的代码适用于您提供的日期: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterLongStyle]; NSDate *date = [dateFormatter dateFromString:@"February 16, 2013"]; NSLog(@"%@", 日期);
    • 顺便说一句,如果它真的解决了你的问题,你可以将我的答案标记为答案:)
    • 如果在具有使用英语以外的语言或长日期样式的不同模式的区域设置的设备上运行此答案将失败。
    • 是的。他问具体情况,用来做测试。
    【解决方案2】:

    如果您希望能够使用本地化的日期格式,您应该使用模板

     NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date]
                                                           dateStyle:NSDateFormatterLongStyle
                                                           timeStyle:NSDateFormatterNoStyle];
    
    NSLog(@"%@", dateString);
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
    [dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"MMMdY"
                                                                 options:0
                                                                  locale:[NSLocale currentLocale]]];
    
    NSLog(@"%@", [dateFormatter dateFromString:dateString]);
    

    【讨论】:

      【解决方案3】:

      由于您有一个要解析的固定格式,您必须使用en_US_POSIX 的语言环境设置日期格式化程序。然后您必须将他的日期格式设置为MMMM dd, yyyy。这将删除具有完整月份名称、月份日期、逗号和四位数年份的任何日期字符串。

      【讨论】:

        猜你喜欢
        • 2011-04-24
        • 2017-04-23
        • 2021-09-11
        • 2013-12-08
        • 2011-11-01
        • 2016-09-01
        相关资源
        最近更新 更多