2016-10-07 11 views
6

setDefaultTimeZoneの方法は現在NSTimeZoneで利用できません。誰かがこれの代用を知っていますか?スイフト3タイムゾーンの問題

いくつかの詳細を追加: を私のappDelegate.swiftでは、私は

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

を持っており、それが他のすべてのファイルには、私はNSTimeZoneが

さて、この値に設定し得るので、私は推測する意図したとおりに動作します、私のUtilsので、私はそう、言って、私はそれを入力し、「2016年10月7日」を与えるこの方法

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:00私に戻っています。どうして?上記のコードで行のコメントを外すと、修正されます。私はどこにでもこの行を使いたくありません。

たとえば、私のプロジェクトの他の部分では、CVCalendar(https://github.com/Mozharovsky/CVCalendar)を使用しています。これは、以前のように同じことがあまりにもここで起こっているので、

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

...それは私が2016年10月8日をクリックしているようconvertedDateを取得するための機能を提供し、それがここにselectedDateは2016年10月7日23次のようになります。 00。

NSTimeZone.Defaultはヨーロッパ/ロンドンをどこにでも印刷します。

これはなぜ起こっているのですか?

+0

あなたが試したコードを表示できます –

+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'に変換する必要はありません。代わりに 'TimeZone(略称:)'で直接オブジェクトを作成することができます。 –

+1

私は知っていますが、理解しやすいです –

9

このようにしてください。

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

編集:私はDateFormatterでこれTimeZoneを使用して、日付と正しい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で、その後NSTimeZoneオブジェクトのdefaultTimeZoneを設定したい場合は、次のように設定することができます。

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

編集した回答を確認してください。 –

+0

@AmrataBこの 'NSTimeZone.default = TimeZone(省略形:" BST ")!を設定することによって、あなたはそれを使用しないデフォルトのタイムゾーンのみが設定され、dateFormatterを使用して特定のタイムゾーンを設定すると、システムまたはローカルのものです。 –

+0

@AmrataB私は何を言おうとしているのですか? –

1

あなたは、カレンダーを使用している場合は、

// *は * UTCに同様のタイムゾーンを使用するようにカレンダーコンポーネントを定義* //

var calendar = NSCalendar.current 

*カレンダーオブジェクトを作成します

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) 

タイムゾーンを識別する地政学的地域識別子。

プロパティpublic var識別子:文字列

を{取得}:

dateFormatter.timeZone = TimeZone(identifier: "UTC")! 
関連する問題