iOS中的日期格式/错误处理问题

Posted

技术标签:

【中文标题】iOS中的日期格式/错误处理问题【英文标题】:Date Formatting/Error handling trouble in iOS 【发布时间】:2013-08-09 15:40:26 【问题描述】:

我有一个通过网络服务调用接收数据的 ios 应用。然后一切正常,没有任何警告,应用程序开始崩溃。我已将其追溯到格式化日期时间值的行。 Web 服务最初返回的日期值如下:

yyyy-MM-dd'T'HH:mm:ss.sssz

然后,在没有警告的情况下,日期格式更改为:

yyyy-MM-dd'T'HH:mm:ss

并导致异常。我已经纠正了这个问题,但是,Web 服务提供了来自全国数千个报告时间敏感数据的站点的数据。因此,我不能保证某些 Web 服务调用仍不会返回旧的日期格式。

来自 C# 和 Java 背景,我解决此问题的常规方法是使用 try/catch 块。然而,在异常处理方面,Objective-C 是另一种动物。我不确定如何处理不同的日期格式。这是我当前进行日期时间格式化的代码

-(NSString*)stringDateFormatter:(NSString*)dateToFormat
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
    //[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.sssz"];
    [df setTimeZone:[NSTimeZone localTimeZone]];
    NSDate *newDateValue = [df dateFromString:dateToFormat];

    [df setDateFormat:@"HH:mm"];
    NSString *retValue = [df stringFromDate:newDateValue];

    return retValue;

处理两种不同的日期时间格式的最佳做法是什么?谢谢! V

【问题讨论】:

当你得到一个异常时,你已经走得太远了,此外,Objective-C 中的异常并不能很好地工作。只需测试 dateFromString 的结果是否为零,或检查传入的字符串。 【参考方案1】:

如果您可能会获得两种不同格式之一的日期字符串,请先尝试一种。如果您得到nil 结果,请尝试其他格式。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSDate *newDateValue = [df dateFromString:dateToFormat];
if (!newDateValue) 
    [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.sssz"];
    newDateValue = [df dateFromString:dateToFormat];

顺便说一句 - 无需将时区设置为本地时区。这已经是默认设置了。

【讨论】:

或者以某种方式检查输入字符串以查看您的格式。

以上是关于iOS中的日期格式/错误处理问题的主要内容,如果未能解决你的问题,请参考以下文章

日期格式如“12 月 10 日星期一”在 ios 5.1 中显示错误

本地日期格式不同时处理 mySQL 日期格式

swift中的日期格式错误

日历中的角度完整日历标题日期格式错误

IOS开发之格式化日期时间

Java处理Excel中的日期格式