2016-09-06 13 views
14

'yerel' üyesi vardır. Xcode8 Beta4 kullanarak Swift2.3'te Swift3.0'da geliştirilen projeyi dönüştürüyorum. Tarihi dize dönüştürmek için bir yöntemim var, ancak onu dönüştüremiyorum. Tip "TimeZone", Swift3

enter image description here

class func convertDateToString(_ date:Date, dateFormat:String) -> String? 
{ 
    let formatter:DateFormatter = DateFormatter(); 
    formatter.dateFormat = dateFormat; 
    formatter.timeZone = TimeZone.local 
    let str = formatter.string(from: date); 
    return str; 
} 

Ayrıca belgelerinde local adında bir üye yoktur.

Doğrudan TimeZone'u kullanmanın bir yolu var mı? ya da NSTimeZone mu kullanmalıyız?

+0

.system' ve '.default'' için aynı –

+0

NSTimeZone.local' işleri '.local bu formatter.timeZone = deneyin. Apple’da bir hata raporu yazabilirsin. –

+0

@ Anbu.Karthik: '.local' da çalışmıyor. – technerd

cevap

23

Sınıf hiyerarşisine derinlemesine girerek, NSTimeZone'u public typealias olarak bulduk, bu da bizim için NSTimeZone erişimini açıyor.

Yani kaybolur olsun sözdizimi hatası altına kullanarak

public struct TimeZone : CustomStringConvertible, CustomDebugStringConvertible, Hashable, Equatable, ReferenceConvertible { 

    public typealias ReferenceType = NSTimeZone 
} 

TimeZone içinde.

Aşağıdaki kod çalışır.

yerel için saat dilimi. varsayılan saat diliminde için

formatter.timeZone = TimeZone.ReferenceType.local 

. Aynı sözdizimi ile default kullanın. sistemi saat dilimi için

formatter.timeZone = TimeZone.ReferenceType.default 

. Aynı sözdizimi ile system kullanın.

3 Swift

formatter.timeZone = TimeZone.ReferenceType.system 

Sen .current yerine .local kullanabilirsiniz.

TimeZone.current 
+1

sadece 'NSTimeZone.local' tor Yerel,' NSTimeZone.default' için varsayılan ve 'NSTimeZone.system' sistem –

+2

@LeoDabus'u kullanın: Evet, doğrudan NSTimeZone kullanabiliriz, ancak Xcode otomatik olarak Swift2.3 kodunu dönüştürürse Swift3.0 sonra 'NSTimeZone' 'TimeZone' dönüştürün. Bu yüzden Swift Sınıflarını kullanmanız önerilir. Yani 'TimeZone' kullanmak isteyen varsa o zaman sorun olacaktır. Teşekkürler! – technerd

22

bunu kullanın yerine hızlı 3'te .local:

TimeZone.current 
+2

Doğru cevap bu olmalı :) – dustinrwh