Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift日期选择器字符串到NSDate的转换减少1年_Ios_Swift_Nsdate - Fatal编程技术网

Ios Swift日期选择器字符串到NSDate的转换减少1年

Ios Swift日期选择器字符串到NSDate的转换减少1年,ios,swift,nsdate,Ios,Swift,Nsdate,将从datePicker获取的日期字符串转换为NSDate时出现问题 例如,如果我在日期选择器中选择日期为23/12/1990,然后将其转换为NSDate,则结果不同。它显示的是世界协调时1989-12-23 23:00:00 当我发出POST请求时,我需要将日期作为三个字符串发送—一个表示日,一个表示月,另一个表示年。 因此,对于我的POST请求,我再次将NSDate转换为字符串。 结果是1989年12月24日 我无法避免这样做,因为在我的模型中,dateOfBirth被设置为NSDate,如

将从datePicker获取的日期字符串转换为NSDate时出现问题

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

当我发出POST请求时,我需要将日期作为三个字符串发送—一个表示日,一个表示月,另一个表示年。 因此,对于我的POST请求,我再次将NSDate转换为字符串。 结果是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])"

你是说结果是
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
而不是
yyy

问题在于使用
yyy
。这个问题每年都会出现。@rmaddy我想这两个问题都存在。@Sulthan:谢谢。。现在可以了,但当我填充文本字段的选择器视图时,它显示的日期比我的dateOfBirth字符串少一天。对不起,这个愚蠢的问题。我只是不知道我在做什么wrong@Sulthan@谢谢你救了我的命