Swift Date Picker字符串到NSDate转换减少了1年

时间:2017-01-03 18:25:51

标签: ios swift nsdate

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

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

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

我无法避免这样做,因为在我的模型中,dateOfBirth被设置为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])"

1 个答案:

答案 0 :(得分:0)

您说结果是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