DateFormatter为特定日期字符串返回nil,在Swift中没有时间

问题描述 投票:17回答:1

我真的不明白这段代码是怎么回事,我正在尝试将字符串转换为日期。我不明白该转换适用于大多数日期,但不适用于仅两个日期。

let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "es")
dateFormatter.dateFormat = "dd 'de' MMMM"

dateFormatter.dateFromString("1 de octubre")
dateFormatter.dateFromString("2 de octubre")
dateFormatter.dateFromString("3 de octubre")
dateFormatter.dateFromString("4 de octubre")
dateFormatter.dateFromString("5 de octubre")
dateFormatter.dateFromString("6 de octubre")
dateFormatter.dateFromString("7 de octubre")
dateFormatter.dateFromString("8 de octubre")
dateFormatter.dateFromString("9 de octubre")
dateFormatter.dateFromString("10 de octubre")
dateFormatter.dateFromString("11 de octubre")
dateFormatter.dateFromString("12 de octubre")
dateFormatter.dateFromString("13 de octubre")
dateFormatter.dateFromString("14 de octubre")
dateFormatter.dateFromString("15 de octubre")
dateFormatter.dateFromString("16 de octubre")
dateFormatter.dateFromString("17 de octubre")
dateFormatter.dateFromString("18 de octubre")
dateFormatter.dateFromString("19 de octubre")
dateFormatter.dateFromString("20 de octubre")
dateFormatter.dateFromString("21 de octubre")
dateFormatter.dateFromString("22 de octubre")
dateFormatter.dateFromString("23 de octubre")
dateFormatter.dateFromString("24 de octubre")
dateFormatter.dateFromString("25 de octubre")
dateFormatter.dateFromString("26 de octubre")
dateFormatter.dateFromString("27 de octubre")
dateFormatter.dateFromString("28 de octubre")
dateFormatter.dateFromString("29 de octubre")
dateFormatter.dateFromString("30 de octubre")

我制作了这段代码以在Playground中试用,但是它复制了我在生产代码中遇到的一些日期。看一下这段代码产生的输出:

Playground output

如您在图像中所见,它在10月8日和15日无效。我也尝试过8月和9月,在那几个月里整天工作。我还尝试过将日期用葡萄牙语输入pt-br区域设置,并且在10月8日和15日也不起作用。这可以解释吗?


更新:@zneak代码为我产生以下输出:

output

换句话说,10月8日停止运行。

ios macos swift nsdate nsdateformatter
1个回答
7
投票

您只需要设置日期格式日历属性:

Xcode 8.2.1•Swift 3.0.2

let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.locale = Locale(identifier: "es")
dateFormatter.dateFormat = "dd 'de' MMMM"
dateFormatter.date(from: "8 de octubre")   // "Oct 8, 2000, 1:00 AM"
© www.soinside.com 2019 - 2024. All rights reserved.