2017-04-25 4 views
0

내 상황은 다음과 같습니다. API 호출에서 티켓 정보를 얻었습니다. 그리고 렐름 브라우저에서 티켓을 활성화 한 날짜와 만료 날짜가 올바르게 저장되었음을 알 수 있습니다 데이터베이스에서 UTC로영역 NSDate가 올바르게 읽히지 않았습니다.

데이터베이스에서 영역 브라우저를 사용하여 startTime이 2017 년 4 월 25 일이고 1:45:30이고 endTime이 2017 년 4 월 26 일 오전 6:45:30임을 알 수 있습니다. (내 현지 시간은 티켓을 활성화 할 때 오전 9시 45 분 30 초 였으므로 서버 측에서 올바르게 설정 됨)

그러나 나중에 코드에서 해당 날짜에 액세스하고 데이터베이스에서 검색하면 나 오프셋 된 날짜! (그리고 아니요, 현지 시간대의 날짜가 아닙니다. UTC로 저장된 날짜 여야합니다.)

는 여기가 데이터베이스에서 정보를 얻을하고 표시하기 위해 사용하는 일부 코드입니다 :

func getTickets() -> [Ticket] { 
     let tickets = userInfo?.tickets.filter("state == %@", "activated").map({ (dbTicket) -> Ticket in 
      var startTime: Date? = nil 
      var endTime: Date? = nil 
      if let start = dbTicket.startTime, let end = dbTicket.endTime { 
       print("START ", dbTicket.startTime, 
        "\nNOW ", NSDate(), 
        "\nEND ", dbTicket.endTime) 
       startTime = start as Date 
       endTime = end as Date 
      } 
      print("START ", dbTicket.startTime, 
        "\nNOW ", Date(), 
        "\nEND ", dbTicket.endTime) 
      return Ticket(id: dbTicket.id, startTime: startTime, endTime: endTime) 
     }) ?? [] 
     return tickets 
    } 

을 그리고 여기에 콘솔로 인쇄됩니다 내용은 다음과 같습니다

START Optional(2017-04-25 17:45:30 +0000) 
NOW 2017-04-25 13:46:15 +0000 
END Optional(2017-04-26 10:45:30 +0000) 

START Optional(2017-04-25 17:45:30 +0000) 
NOW 2017-04-25 13:46:15 +0000 
END Optional(2017-04-26 10:45:30 +0000) 

올바르지 않습니다! START는 지금과 거의 같아야합니다. 그렇다면 START 및 END 날짜가 Realm 데이터베이스에서 잘못 읽히는 이유는 무엇입니까? 특히 나는 렐름 브라우저에서 볼 수 있으며 올바르게 저장되어 있습니다.

답변

1

NSDate은 특정 시간대와 관계없이 특정 시간대를 나타냅니다. 시간대가 NSDate과 연결된 유일한 시간은 문자열 표현을 만들 때입니다 (이 경우 print이 끝나면 -[NSDate description]가됩니다). 날짜 형식이 지정된 시간대를 제어하려면 NSDateNSDateFormatter을 사용하는 문자열로 명시 적으로 변환하면 사용되는 시간대를 제어 할 수 있습니다.