2015-10-15 4 views
9

を使用していない:スウィフト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日」を得るために期待していたが、私は「oktober 15、2015」を得ました。月はスウェーデンのロケールです。

どうしたのですか?ロケールとフォーマットの両方が間違っています。

+0

私は同じコードを試してみましたが、私はこの出力を得るには2015年10月15日 –

答えて

12

documentationdateFormatFromTemplateで確認してください。

戻り値

テンプレートで指定された日付 形式成分を表すローカライズされた日付形式文字列は、ロケールで指定 ロケールの適切に配置された:それは、と述べています。

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

これは、配置と言語に関する問題です。

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

おそらくタイプミスです:-) LocaleIdentifierにアンダースコア "en_US"が付きます。 – kometen

13

これを試してみてください:

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) 

スウィフト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!) 

あなたは次のように日付フォーマッタのdateFormatlocaleを設定する必要が探しているの日付を取得するには私はそれが助けて欲しい

+0

ローカルen_US_POSIXとen-USの違いは何ですか?上記の答えは別の方法でやっているようです – Thomas

2

2017年4月3日(月曜日)このコード

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

//を試してみてください...

3

ベター・スウィフト3/3.1ソリューション:

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier: "en_US") 
関連する問題