Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从没有分隔符(/或-)的DateFormatter获取日期返回错误的日期:_Ios_Swift_Date Formatting - Fatal编程技术网

Ios 从没有分隔符(/或-)的DateFormatter获取日期返回错误的日期:

Ios 从没有分隔符(/或-)的DateFormatter获取日期返回错误的日期:,ios,swift,date-formatting,Ios,Swift,Date Formatting,从没有分隔符的DateFormatter获取日期时返回错误的日期 根据我们的要求,我们不能在日期格式化程序字符串中使用/或- let dateFormatter = DateFormatter() dateFormatter.timeZone = TimeZone.current dateFormatter.timeZone = TimeZone(identifier: "UTC") dateFormatter.locale = Locale(identifier: "en_US

从没有分隔符的DateFormatter获取日期时返回错误的日期

根据我们的要求,我们不能在日期格式化程序字符串中使用/或-

  let dateFormatter = DateFormatter()
  dateFormatter.timeZone = TimeZone.current
  dateFormatter.timeZone = TimeZone(identifier: "UTC")
  dateFormatter.locale = Locale(identifier: "en_US_POSIX")
  dateFormatter.calendar = Calendar(identifier: .iso8601)

  dateFormatter.dateFormat = "ddMMyyyy"
  dateFormatter.date(from: "1112987")
返回“2987年11月1日上午8:00”,但应为“2009年12月11日”

另一个例子:

  let dateFormatter = DateFormatter()
  dateFormatter.dateFormat = "MMddyyyy"
  dateFormatter.date(from: "1131987") // "Jan 13, 1987 at 12:00 AM"
由于11月31日是无效日期,因此应返回零


请建议任何解决方案

您必须将日期格式从
ddMMyyyy
更新为
MMddyyyy

您的代码:-
dateFormatter.dateFormat=“ddMMyyyy”

新代码:-
dateFormatter.dateFormat=“MMddyyyy”

此外,您必须设置4位数的年份,而不是3位数的年份

您的代码:-
dateFormatter.date(from:“1112987”)

新代码:-
dateFormatter.date(从:“11120987”


如果您在回复后收到任何问题。

您只处理3位数的年份吗?如果结果令人困惑且可能含糊不清,那么将日期表示为字符串有什么意义?要求是错误的。您说2位数代表月份,2位数代表天,4位数代表年,但您随后提供了一个7位数的字符串。您为什么希望它忽略该要求年的红色数字,而不是月或日的数字?服务器不应该基于国家。这是一个糟糕的设计。它应该将任何条目转换为标准日期:使用一些ISO的字符串表示法,如8601,使用unix时间戳等。您的输入字符串不明确,并且声明“987年12月11日”为“正确”而不是2987年11月1日(或2987年1月11日)是似是而非的。如果您有一些关于如何解析小于8位的字符串的内部规则,那么您只需要编写代码来处理这些边缘情况。对不起,
DateFormatter
处理不正确或者您使用的
DateFormatter
不正确,这不是问题,而是内部coding约定只是一个糟糕的设计选择。这是有原因的,为什么有很好的约定。由于日期格式来自服务器,我不能继续在年初只插入0个字符。我将不得不处理大量字符串操作,因为格式和字符串都是基于用户区域设置的动态的和首选项。然后您必须更新API响应。因为任务结束时,任何人都必须管理iOS开发人员或API开发人员。