日付形式("dd-MM-yyyy"
)のいくつかの値をテストしていますが、説明できない特殊なケースがあります。
var datef = NSDateFormatter()
datef.dateFormat = "dd-MM-yyyy";
var date_a = "02-01-1990"
var date_b = "01-01-1990"
var date_f_a = datef.dateFromString(date_a);
var date_f_b = datef.dateFromString(date_b);
data_f_a
1990年1月2日午前12:00をdate_f_b
返しますが、nilを返します。1990年1月1日を除いて、他の日付は期待値を返します。
datef.lenient = true
date_f_bを追加すると、nilではなくなりますが、追加する必要はありません。なぜ無効な日付なのですか?
編集1:私が使用した場合も同じように起こりますDateFormatter()
:
編集2: Xcodeバージョン:8.1
いくつかのコメントの後、問題のコードはロケールがes_PE
。で実行されていると判断されました。これはペルーの国です。問題の日付は1990年1月1日です。デフォルトでNSDateFormatter
は、ローカルタイムゾーンが使用され、時間がない日付文字列を解析する場合は、深夜が想定されます。
ペルーでは、1990年に夏時間が1990年1月1日の深夜に始まりました。これは、時計が1989年12月31日の午後11時59分59秒から1990年1月1日の午前1時00分までまっすぐ進んだことを意味します。1990年1月1日は真夜中はありませんでした。
これが01-01-1990
、このユーザーの文字列の変換に失敗した理由です。ペルーでは、この日付の深夜はありませんでした(また、夏時間が同時に開始された他のいくつかのロケールがある場合は)。このコードをテストするほとんどの人はペルーに住んでいないので、このコードをテストするほとんどの人はそれがうまく機能すると主張するでしょう。
役立つ情報が掲載された便利なウェブサイトを見つけました。ペルーと夏時間の詳細については、http://www.timeanddate.com/time/change/peru/lima?year = 1990を参照してください。1989年と1991年には、ペルーは夏時間を使用していなかったことに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加