2016-11-01 1 views
2

반환문자열 날짜는 내가 <code>dateFormatter</code> 다음 한 잘못된 시간

var date = Date() 
var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
let timeZone = NSTimeZone(name:"UTC+01:00") 
dateFormatter.timeZone = timeZone as TimeZone! 

let sweDate = dateFormatter.string(from: date) 

내가 인쇄 할 때이 값 얻을 :

1: print(date) // 2016-11-01 10:16:19 +0000 
2: print("\(dateFormatter.string(from: date))") // 2016-11-01 11:16:35 
3: print(dateFormatter.date(from: sweDate)!) // 2016-11-01 10:16:41 +0000 

두 번째 값 오른쪽 하나입니다 문자열 형식으로 변환하지만 Date()으로 변환하면 세 번째 인쇄 잘못된 시간이 표시됩니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까? 스웨덴어입니다.

+0

좋아, 그래서 그것은'dateFormatter.date (from : sweDate)와 아무 것도하지 않습니다!)'? 두 번째 값을'Date'로 어떻게 가져올 수 있습니까? –

+0

'Date'는 표준 시간대를 저장하지 않으므로 서식을 지정할 때 사용한 표준 시간대와 상관없이 항상 UTC 시간을 인쇄합니다. – ozgur

+0

@ozgur, 네 알겠습니다.하지만 두 번째 값을'String' 대신에'Date'로 어떻게 가져올 수 있습니까? –

답변

1

문자열 'sweDate'가 시간대 정보를 포함하지 않으므로 영 (zero) 영역에 대한 시간을 얻을 수 있습니다.

-1

실제로 이것은 정확한 시간이지만 여러분이 말했듯이, 그것은 다른 시간대이며 간단히 백엔드에 저장되는 방법입니다. 항상 DateFormatter를 사용하여 Date에서 String으로 돌아 가면 사용자는 알 수 없습니다.

당신은 항상 당신이 필요로 정확히 표시하기 위해 다른 DateFormatters를 사용할 수 있습니다 http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

예 : "YYYY-MM-dd'T'HH : MM : SS의 ZZZZZ" 는 "2016-11-01T11를 얻을 것이다 : 16시 35 분 +01 : 00 "