2016-04-08 17 views
1

I dize için böyle uzantısını yazdık değil:Dize İngilizce olarak çalışır, ancak Rusça

extension String { 
    var asDate : NSDate! { 
     print(self) 
     let styler = NSDateFormatter() 
     styler.dateFormat = "dd MMM yyyy" 
     print(styler.dateFromString(self)) 
     if let aStyler = styler.dateFromString(self) { 
      return aStyler 
     } else { 
      return NSDate() 
     } 
    } 
} 

Ben İngilizce dil cihazda ayarlandığında yalnızca çalıştığını fark ettik. Bununla birlikte, örneğin, Rusça ile çalışmaz. Niye ya?

Bir dize alır mesela "10 Nis 2016" ve bu dizeyi tarihe dönüştürmeli. dili İngilizce olmayan Ancak styler.dateFromString(self)nil zaman. Kendim (dönüştürmek istediğim dize) unicode biçimini eşleştirdim. Ancak, ben styler.dateFromString(self) hep nil döndürür neden anlamıyorum.

+0

Ne demek "Ben [dizgenin] unicode biçimiyle eşleştiğini kontrol ettim"? Bu dize Nisan için gerçek Rus adını içerir mi? Yoksa İngiliz dizisini Rus ortamında mı dönüştürmek istiyorsunuz? – hnh

+1

Muhtemelen Nisan rusça olmadığı için? Lütfen bunu kontrol edin, yerel ayarı ayarlayamazsınız, böylece bir probleminiz olmazdı. . -> http://stackoverflow.com/a/6735644/767329 –

+0

Dize her zaman İngilizce'dir, tarih biçimi "10 Nis 2016" şeklindedir. Unicode formatına göre styler.dateFormat string değeri LDML ile eşleşiyordu (http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Patterns_AM_PM), bu yüzden doğru. – phbelov

cevap

4

aksi yapılandırılmamış ise NSDateFormatter dizeleri ayrıştırmak varsayılan yerel ayarı kullanır. Bilgisayarınızı Rusça'ya değiştirirseniz, Rus ay isimlerini bekler. 'Apr' Rusça değil, bu dizeyi geçerli bir ay olarak ayrıştıramaz. ayrıştırmak dize her zaman İngilizce ise

, bir İngiliz yerele biçimlendiricinin yerel ayarlamanız gerekir. Öyle ki:

let df  = NSDateFormatter() 
df.locale  = NSLocale(localeIdentifier: "en_US") 
df.dateFormat = "dd MMM yyyy" 
let date  = df.dateFromString("21 Apr 2016") 
İlgili konular