-1

私は次のメソッドを書きました:

- (NSDate *)stringToDate:(NSString *)dateString
{
    // Convert string to date
    NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
    NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"America/New_York"];
    [dateFormat setDateFormat:@"M/d/yyyy HH:mm:ss"];
    [dateFormat setTimeZone:tz];
    NSDate * date = [dateFormat dateFromString:[NSString stringWithFormat:@"%@ 00:00:00", dateString]];

    return dateOnly;
}

2013年11月1日や2013年11月13日などの日付だけでこれを呼び出すと、2013-11-0104:00:00+0000および2013-11-1305:00:00+0000になります。

リターンにブレークポイントを設定すると、日付は正しく表示されますが、この呼び出しの後に呼び出し元の関数でブレークすると、日付は時間とともに返されます。

どうして私の時間はいつも0ではないのですか。とにかく私の関数の何が悪いのか教えてもらえますか?

ありがとうございました

アップデート:

入力文字列は次のとおりです:11/1/2013および11/13/2013

4

1 に答える 1

4

NSDateは特定の時点です。常に時間コンポーネントがあります。
また、NSDateFormatterから文字列として出力されない場合、日付と時刻は常にUTC/GMTのいずれかになります。


形式と日付文字列が一致する必要があります。

NSString *dateString = @"11/1/2013";
[dateFormat setDateFormat:@"M/d/yyyy"];

1時間の間隔は、夏時間から来ています。2013年11月3日まで、ニューヨークには夏の時間があります。http://www.timeanddate.com/worldclock/clockchange.html?n=179


わかりました、それで私はそれを無視できますか?時間の部分が原因で比較が失敗したときにNSDatesを比較しようとしています

DSTの混乱を回避し、それらを比較するために、日中の時間(つまり、正午)を使用して日付を作成する必要があります。そのためにNSComponentsを使用します。


iOS /ココア開発者にとって必見:素晴らしいWWDC2011ビデオ「セッション117-カレンダー計算の実行」

于 2013-01-07T16:46:31.970 に答える