DateFormatter中的Swift语言错误?

时间:2017-09-22 17:39:58

标签: swift dateformatter

我正在测试一个有UITextField的应用程序,用户输入日期,所以我选择输入的字符串并使用DateFormatter生成Date对象。

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

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属性,但我对某些条目也没有。

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的错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

最有可能是巴西 - 秋季综合症

巴西的夏令时变化发生在午夜。在秋季,当时钟设置为前进时,没有凌晨12:00 / 0:00所以日期为nil

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