是否可以定义适应可变数据的日期格式?

时间:2012-01-11 11:20:25

标签: iphone ios date format nsdateformatter

我需要找到一个可以适应以下两个日期的日期格式:

  1. 2012-01-22T14:27:31.176+0000
  2. 2012-01-22T14:27:31+0000
  3. 如您所见,唯一的区别是日期2没有小数秒。

    两种日期格式为:

    1. yyyy-MM-dd'T'HH:mm:ss.SZ
    2. yyyy-MM-dd'T'HH:mm:ssZ
    3. 第二个省略 .S

      是否可以选择 .S ?或者我必须继续使用2种不同的格式?

      问题在于我从API调用中获取日期,有时它会带有小数秒,有时则没有。

      我想我可以检测到小数位的存在并相应地使用两种不同的日期格式,但我一直在寻找更清洁的解决方案。

      谢谢!

5 个答案:

答案 0 :(得分:1)

您可以将NSDateFormatter的{​​{1}}属性设置为lenient,这允许YES对您的输入字符串进行猜测。但是,你应该测试一下,因为它可能会给你一些误报。

答案 1 :(得分:0)

嗯,首先要看的是数据的实际长度。不干净,但应该工作

答案 2 :(得分:0)

您可以测试字符串的长度,然后根据长度使用2种不同的日期格式化程序之一吗?

答案 3 :(得分:0)

我会有两个日期格式化程序,然后选择要使用的日期格式化程序,具体取决于日期字符串中是否有小数位。

我不认为有一个格式字符串会使十进制可选

或者你可以使用带小数秒的格式字符串,你的日期没有小数秒只会在结尾显示.00,可能看起来更一致吗?

答案 4 :(得分:0)

@JustSid在这种情况下建议的“宽大”属性不起作用。

没有找到“更清洁”的解决方案,我回到了我的第一个,它检测到小数位的存在并相应地使用两种不同的日期格式。

NSRange textRange =[targetDate rangeOfString:@"."];

if(textRange.location == NSNotFound) {
    format = @"yyyy-MM-dd'T'HH:mm:ssZ";
} else {
    format = @"yyyy-MM-dd'T'HH:mm:ss.SZ";
}