2017-01-03 1 views
0

datePicker에서 NSDate로 가져온 날짜 문자열을 변환 할 때 문제가 있습니다.Swift Date Picker 문자열을 NSDate로 변환하여 1 년 단축했습니다.

예를 들어 날짜 선택 도구에서 23/12/1990으로 날짜를 선택한 다음 NSDate로 변환하면 결과가 달라집니다. 그것은 1989-12-23 23:00:00 UTC를 보여줍니다.

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])" 

답변

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을 사용해야합니다.

+0

문제는 'YYYY'사용입니다. 이 질문은 매년 발생합니다. – rmaddy

+0

@rmaddy 두 가지 문제가 있다고 생각합니다. – Sulthan

+0

@Sulthan : 고맙습니다. 지금은 작동하지만 내 textField에 대한 선택보기를 채울 때 내 dateOfBirth 문자열보다 하루가 짧습니다. 바보 같은 질문에 대한 죄송합니다. 나는 내가 잘못하고있는 곳을 알아낼 수 없다. –

관련 문제