web-dev-qa-db-ja.com

Swift NSDateFormatterが正しいロケールと形式を使用していない

これは私のコードです:

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = NSDateFormatter.dateFormatFromTemplate("d MMMM y", options: 0, locale: NSLocale(localeIdentifier: "en-US"))
cmt.date = usDateFormat.stringFromDate(currentDate)

「2015年10月15日」になると予想していましたが、「2015年10月15日」になりました。月はスウェーデン語ロケールです。

私は何を間違えましたか?ロケールと形式の両方が間違っています。

15
Lord Vermillion

これを試して:

let dateString = "2015-10-15"
let formater = NSDateFormatter()
formater.dateFormat = "yyyy-MM-dd"
print(dateString)

formater.locale =  NSLocale(localeIdentifier: "en_US_POSIX")
let date = formater.dateFromString(dateString)
print(date)

Swift 3 Xcode 8

let dateString = "2015-10-15"
let formater = DateFormatter()
formater.dateFormat = "yyyy-MM-dd"
print(dateString)

formater.locale =  Locale(identifier: "en_US_POSIX")
let date = formater.date(from: dateString)
print(date!)

役に立てば幸いです。

23
ikbal

dateFormatFromTemplateの-​​ ドキュメント を確認してください。それはそれを述べています:

戻り値

Localeで指定されたロケールに適切に配置された、テンプレートで指定された日付形式コンポーネントを表すローカライズされた日付形式文字列。

返される文字列には、テンプレートで指定されたコンポーネントが正確に含まれていない場合がありますが、たとえばロケール固有の調整が適用されている場合があります。

それがアレンジと言語に関する問題です。探している日付を取得するには、日付フォーマッターのdateFormatlocaleを次のように設定する必要があります。

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = "d MMMM y"
usDateFormat.locale = NSLocale(localeIdentifier: "en_US")
cmt.date = usDateFormat.stringFromDate(currentDate)
14
Zell B.

より良いSwift 3/3.1ソリューション:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
3
szubiszon

このコードを試してください

let locale1:Locale = NSLocale(localeIdentifier: "en_US") as Locale
var date =  Date().description(with: locale1)
print(date)

// 2017年4月3日月曜日...

3
mahdiTGK