ios - Swift Date Picker String 到 NSDate 的转换减少了 1 年

标签 ios swift nsdate

当我将从 datePicker 获取的日期字符串转换为 NSDate 时遇到问题。

例如,如果我在日期选择器中选择日期为 23/12/1990,然后将其转换为 NSDate,则结果是不同的。它显示 1989-12-23 23:00:00 UTC。

当我发出 POST 请求时,我需要将日期作为三个字符串发送 - 一个表示日,一个表示月,另一个表示年。 因此,对于我的 POST 请求,我再次将 NSDate 转换为 String。 结果为 1989-12-24

我无法避免这样做,因为在我的模型中,出生日期设置为 NSDate,如果我更改它,将会产生许多其他问题。

最后,在 POST 请求成功后,我得到了日、月和年的字符串......我必须再次将其设置为 NSDate。结果为 - 1989-12-24 - 与我从 NSDate 转换的字符串相同。

谁能帮我解决这个问题吗?

这是我在表单中单击“保存”时的代码 -

        var birthDate: NSDate?

        if let dateOfBirthText = dateOfBirth.text {
            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "dd/MM/YYYY"
            birthDate = dateFormatter.dateFromString(dateOfBirthText)
        }

这是我在 POST 请求期间将此 NSDate 转换为字符串时的代码

var dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd"
            var dateString = dateFormatter.stringFromDate(userPersonalData.dateOfBirth!)

            let individualDateComponents = dateString.componentsSeparatedByString("-")
            let dobYear = "\(individualDateComponents[0])"
            let dobMonth = "\(individualDateComponents[1])"
            let dobDay = "\(individualDateComponents[2])"

最佳答案

您说的结果是1989-12-23 23:00:00 UTC。这意味着您想要使用 UTC 格式的日期。因此,您也必须将选择器的时区设置为 UTC。

以及您想要避免时区差异的任何地方......:

let utcTimeZone = TimeZone(secondsFromGMT: 0)

let datePicker: UIDatePicker = ...
datePicker.timeZone = utcTimeZone

let posixLocale = Locale(identifier: "en_US_POSIX")

let formatter = DateFormatter()
formatter.locale = posixLocale //you should really use this when encoding dates for API
formatter.timeZone = utcTimeZone

还要确保使用 yyyy 而不是 YYYY

关于ios - Swift Date Picker String 到 NSDate 的转换减少了 1 年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450001/

相关文章:

ios - Xcode 9 iOS 模拟器在安装 Xcode 10 beta 后变成黑屏

ios - 创建新的 View Controller

ios - 根据计算值 [Swift] 使用 slider 更改文本字段中的值

swift - 将类型为 Any 的 Swift Encodable 类转换为字典

ios - 在iOS中将日期从字符串转换为NSDate

html - Swift HTML 编码的 attributeText 被截断

ios - Xcode 库因 Xcode 5.1 损坏 - "Assertion failed"

swift - 在 swift 中绘制虚线背景

ios - 将 NSDates 天设置为相同的值

iphone - 计算字符串的速度