DateFormatter 中的 Swift 语言错误?

标签 swift dateformatter

我正在测试一个具有 UITextField 的应用程序,用户可以在其中输入日期,因此我获取输入的字符串并使用 DateFormatter 生成 Date 对象。

当我尝试转换返回 nil 值的字符串“10/15/2017”时,问题首先出现。所以我创建了一个代码来生成从“01/01/2000”到“12/31/2020”的字符串,我意识到这个问题在每年 10 月或 11 月左右的所有年份都会发生。 我创建了一个代码来打印所有返回 nil 值的日期:

import UIKit
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .short
dateFormatter.locale = Locale(identifier: "en_US")

for day in 1...30 { // Generate the days
    for month in 1...12 { // Generate the months
        for year in 2000...2020 {
            if month == 2, day > 28 { // Check if month is february
               continue
            }
            str = "\(String(format: "%02d", month))/\(String(format: "%02d", day))/\(String(format: "%02d", year))"
            let date = dateFormatter.date(from: str)          
            if date == nil {
                print("\(str)")
            }
        }
    }
}

我还尝试更改 dateFormat,甚至更改 locale 属性,但某些条目也为 nil。

dateFormatter.dateFormat = "MM/dd/yyyy"

这段代码打印出以下内容:

11/02/2004
11/03/2002
11/05/2006
10/08/2000
10/14/2001
10/14/2007
10/15/2017
10/16/2005
10/16/2011
10/16/2016
10/17/2010
10/18/2009
10/18/2015
10/18/2020
10/19/2003
10/19/2008
10/19/2014
10/20/2013
10/20/2019
10/21/2012
10/21/2018

我正在使用 Xcode 8.3.3 和 Swift 3。这是 Swift/Xcode 的错误还是我做错了什么?

最佳答案

这很可能是巴西跌倒综合症

巴西的夏令时更改发生在午夜。在秋天,当时钟调快时,没有 12:00 am/0:00,所以日期为 nil

将时区设置为午夜不发生夏令时变化的国家或将小时设置为中午

关于DateFormatter 中的 Swift 语言错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46370373/

相关文章:

ios - 滑动以查看 UITableViewCells 崩溃时的操作

swift - Swift 3 中的日期验证

swift - 在 DateFormatter 中使用 NumberFormatter

swift - 如何在swift中将 'Date'类型的值转换为 'String'

ios - 无法创建有效的 JSON 对象?

swift - 如何使用 swift 在设备日历中添加事件?

swift - 从 GKMatch 访问玩家属性

swift - 为什么尝试在 iOS Swift 3 中使用 dateFormatter 时得到 nil?

swift - DateFormatter 在特定设备上返回 nil

arrays - 在 swift 4.2 的 TableView 中重复数组的 n 索引