【问题标题】:NSDate formatting for some date is not the valid date某些日期的 NSDate 格式不是有效日期
【发布时间】:2016-09-28 04:13:44
【问题描述】:

目前我有一段代码将用户键入的一组字符串(例如 900130)转换为使用 yyMMdd(马来西亚 IC)格式的日期。我的字符串转换代码如下:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyMMdd"];
date = [dateFormat dateFromString:temp]; // temp = string key in by user

当我运行一些测试时,我没有遇到这个问题,但是当我把它交给其他人测试它时,问题出现在应该转换为 30/1/1949 的字符串 490130 正在转换它的地方至 2049 年 1 月 30 日。

如何将 490130 转换为 30/1/1949 而不是 30/1/2049

【问题讨论】:

  • 您希望将 2 位数年份视为 19xx 还是 20xx 的截止值?
  • 日期加 100 年?
  • 或从日期减去 100 年。
  • @rmaddy 也许我应该添加一个检查来比较它是否在今年.. 嗯...

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

NSDateFormatter 假设年份小于 50 时为 20xx,如果年份大于 50,则假定 2 位年份为 19xx。我忘记了当年份为 50 时它假定哪个。

您似乎想要一个不同于 50 的截止值。没有内置支持使用不同的截止值。

一种选择是查看前两个字符,看看它是在您的截止点下方还是之后。然后根据需要在字符串的开头添加 19 或 20。然后使用yyyyMMdd解析字符串。

【讨论】:

  • 感谢您对日期格式化程序的解释。我通过检查当前年份和键入的年份以手动将“19”或“20”添加到字符串的前面并将字符串解析为 yyyyMMdd 解决了我的问题
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多