2016-10-07 4 views
6

setDefaultTimeZone 메서드는 더 이상 NSTimeZone에서 사용할 수 없습니다. 누군가 이것에 대한 대용품을 알고 있습니까?스위프트 3 시간대 문제

몇 가지 세부 사항을 추가 : 을 내 appDelegate.swift, 나는

 NSTimeZone.default = TimeZone(abbreviation: "BST")! 

을 가지고 있고 그것은 다른 모든 파일에, 나는 NSTimeZone이

이제이 값으로 설정 얻을 수 있기 때문에 내가 추측 의도 한대로 작동 내 경우 Utils, 나는

static func getDate(_ dateStr: String) -> Date { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    // dateFormatter.timeZone = TimeZone(abbreviation: "GMT") 
    let date = dateFormatter.date(from: dateStr)! 
    return date 
} 

그래서, 그것은 다시 2016년 10월 6일 23시 나에게주는 내가 그것을 입력 "2016년 10월 7일"를 제공, 말할 수이 방법을 가지고있다. 왜? 위의 코드에서 줄의 주석 처리를 제거하면 문제가 해결됩니다. 나는이 라인을 어디서나 사용하고 싶지 않다.

예를 들어, 내 프로젝트의 다른 부분에서는 CVCalendar (https://github.com/Mozharovsky/CVCalendar)를 사용했습니다. 그것은 그것이 내가 2016년 10월 8일 클릭입니다 ... 너무 여기에 무슨 일이 일어나고 이전과 너무

func didSelectDayView(_ dayView: DayView, animationDidFinish: Bool) { 
    selectedDay = dayView 
    selectedDate = dayView.date.convertedDate()! 
} 

처럼 같은 일을 convertedDate를 얻기위한 기능을 제공하며 여기되어 selectedDate 2016년 10월 7일 23이된다 : 00.

그리고 NSTimeZone.Default는 모든 곳에서 유럽/런던을 인쇄합니다.

왜 이런 일이 일어나는 지 아는 사람이 있습니까?

+0

ur 시도 코드 –

+0

https://developer.apple.com/reference를 표시 할 수 있습니까?/foundation/nstimezone /이 문서를 참조하십시오. –

+0

@ Anbu.Karthik 이것은 AppDelegate.swift의 Swift3 이전에 사용했던 것입니다. – AmrataB

답변

6
let locale = NSTimeZone.init(abbreviation: "BST") 
NSTimeZone.default = locale as! TimeZone 
: 당신이 날짜 포맷터 시간대를 설정하려면이 같은 위의 접근 방식을 따를 수

시험해보기

+2

'NSTimeZone'의 인스턴스를 생성하고이를 'TImeZone'으로 변환 할 필요가 없습니다. 대신에 my answer과 같이'TimeZone (abbreviation :)'을 사용하여 직접 객체를 생성 할 수 있습니다. –

+1

알아요.하지만 조금 이해하기 쉽습니다. –

9

이렇게 해보십시오.

TimeZone.ReferenceType.default = TimeZone(abbreviation: "BST")! 

편집 : 나는 DateFormatterTimeZone를 사용 날짜가 올바른 BST 시간을 얻을 수있다.

TimeZone.ReferenceType.default = TimeZone(abbreviation: "BST")! 
let formatter = DateFormatter() 
formatter.timeZone = TimeZone.ReferenceType.default 
formatter.dateFormat = "yyyy-MM-dd HH:mm" 
let strDate = formatter.string(from: Date()) 
print(strDate) 

당신은 스위프트 3에서이 같이 설정할 수 있습니다 defaultTimeZone 객체 NSTimeZone 설정하십시오.

NSTimeZone.default = TimeZone(abbreviation: "BST")! 
+0

수정 된 답변을 확인하십시오. –

+0

@AmrataB @AmrataB이'NSTimeZone.default = TimeZone (약자 : "BST")!를 설정하면 사용하지 않는 기본 시간대 만 설정되며, dateFormatter를 사용하면 특정 시간대를 다른 설정으로 사용하는 것이 좋습니다. 시스템 또는 로컬 시스템. –

+0

@AmrataB 내가하는 말을 듣고 있습니까? –

1

당신이 다음 캘린더를 사용하는 경우,

// * 달력 개체 * 만들

var calendar = NSCalendar.current 

// *을 달력 구성 요소가 UTC로뿐만 아니라 시간대를 사용하도록 정의 *

let unitFlags = Set<Calendar.Component>([.hour, .year, .minute]) 
calendar.timeZone = TimeZone(identifier: "UTC")! 
/// Returns a time zone initialized with a given identifier. 
/// 
/// An example identifier is "America/Los_Angeles". 
/// 
/// If `identifier` is an unknown identifier, then returns `nil`. 
public init?(identifier: String) 

시간대를 식별하는 지정 학적 지역 식별자.

공공 VAR 식별자 : 문자열

을 {얻을} :

dateFormatter.timeZone = TimeZone(identifier: "UTC")!