iPhoneの日付文字列でミリ秒に使用するフォーマット文字列は何ですか?


100

ミリ秒を含む形式で文字列を解析する必要があります。正しい日付値を取得するためにどのフォーマット文字列を使用しますか?

たとえば、「2011-06-23T13:13:00.000」という値の文字列があるとします。

次のコードでは、NSDateFormatterにどのフォーマット文字列を渡しますか?

NSString *dateValue = @"2011-06-23T13:13:00.000";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSString *formatString = @"yyyy-MM-dd'T'HH:mm:ss.???";
[formatter setDateFormat:formatString];
NSDate *date = [formatter dateFromString:dateValue];

???の代わりに何を使用しますか?上記のコードで?

回答:


211

これSSSは、Unicode Locale Data Markup Language仕様によるものです。

"yyyy-MM-dd'T'HH:mm:ss.SSS"

より一般的には、任意の数の大文字のS文字を使用して、秒の端数コンポーネントの小数点以下の桁数を増やします。(ss.Sたとえば、1/10秒単位の時間を表示します。)


2
ミリ秒の緩やかな解析を行う方法を知っているかどうか疑問に思っていましたか?日付には、6、7、またはミリ秒がない場合もあります。私は正規表現で行くことができましたが、これが適切なフォーマット文字列を使用してすぐに実行できるかどうか疑問に思っていました。
Cyupa 2013年

このように、Sの最大数は3です(SSSなど)。さらに追加すると、たとえば、timeIntervalSince1970の1415986217.544384と.SSSSSSがゼロになるだけなので、優れたソリューションではありません。
マルハル2014年

@Cyupaミリ秒は、1/1000秒にすぎません。小数点以下6桁はマイクロ秒、小数点以下1桁はデシ秒です。–小数点以下の桁数にミリ秒を使用することは、比喩的に何かを文字通り使用することと同じくらい間違っています。あなたはまだそれを行うことができますが、それは単語の意味を変えています。
Liggliluff


4

最後に同じ数の「S」を渡す必要があります。たとえば、「私の日付「2015-11-17T03:36:45.041503Z」で「yyyy-MM-dd'T'HH:mm:ss.SSSSSSz」を使用しました。フォーマッター、つまり、「S」の数が6桁の6桁であることを示しています。


ミリ秒ではなくマイクロ秒でナノ秒を取得するためにフォーマットされるもの。'yyyy-MM-dd'T'HH:mm:ss.SSSSSSz'と 'yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSz'を試してみましたが、機能しません。
IndexOutOfDevelopersException

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.