iPhone OS:特定の日付のNSDateを作成するにはどうすればよいですか?


回答:


211

@チャックの答えは正しいです、そして私を次のコードに導きます。私が共有すると思いました:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];

7
注意もありsetHoursetMinutesetSecond、などは細かい粒度のために。
devios1 2013

19

これを使えます

NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];

これがあなたを助けることを願っています。


「dateFromString」関数の使用には注意してください。完全に有効な日付をいくつか使用すると、無残に失敗することがわかりました。日付文字列を解析する別の方法については、以下の私の投稿を参照してください。
Mike Gledhill 2013

Oded Benが言及する方法も、もう1つの最良の方法です... NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay:10]; [comps setMonth:10]; [comps setYear:2010]; NSDate * date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Kamleshwar

16

UNIXyの日付ではなく、特定のカレンダーの日付について話している場合は、おそらくNSCalendarの日付が必要ですdateFromComponents:


9

Swiftの例

多くの場合、例が最も簡単な学習方法です。いくつかの例を示します。

これが一番簡単です。

let currentDateTime = Date()

2017年2月20日

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20

// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)

1976年4月1日

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1

// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)

詳細が必要ですか...?

日付を作成する方法は他にもあります。それら、および日付を表示する方法を学びたい場合は、私の完全な答えを参照してください


8

NSDateのドキュメントを参照してください。あなたは使用することができるdateFromString:方法NSDateFormatterdateFromComponents:方法をNSCalendar


文字列の日付を使用すると、「1969-12-31 16:00:00」-0800の日付が
続く

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; NSDate * capturedStartDate = [dateFormatter dateFromString:@ "2001年1月2日"]; NSLog(@ "%@"、[capturedStartDate description]); 出力:2010-04-05 10:49:47.688 Calendar2 [21339:207] 1969-12-31 16:00:00 -0800
nickthedude

たぶん、プレーンではなくフォーマットされた日付にいくつかのパラメータを設定する必要がありinitますか?
zoul

3

この質問への回答を探しているときにこのスレッドを見つけましたが、Big Nerd Ranch Objective-Cプログラミングブックで良い例を見つけました。私ではなく、彼らの功績です。

  NSDateComponents *myBDay  =[[NSDateComponents alloc] init];
    [myBDay setDay:22];
    [myBDay setMonth: 04];
    [myBDay setYear: 1984];
    [myBDay setHour:9];
    [myBDay setMinute:25];
    [myBDay setSecond:35];

    NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDate *dateOfBirth = [g dateFromComponents:myBDay];

2

ばかげているね。

2013年半ばとApple は、NSDate値を設定する簡単な方法をまだ提供していません。

現在のiPadプロジェクトでは、NSDateから年の値を取得するための独自のヘルパークラスを作成するために、生産性をしばらく停止する必要があるとは信じられませんでした。つまり、これは基本的なものです。

とにかく、これが私の文字列をNSDate値に変換するためにプロジェクトで使用したヘルパークラスです。

@implementation DateHelper

+(NSDate*)parseDateString:(NSString *)dateString
{
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
    [rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];

    NSDate *theDate = nil;
    NSError *error = nil;
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
        NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
    }

    return theDate;
}

@end

このコードを使用すると、次のようなものを使用してNSDate値を設定できます。

NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];

注:この関数は、https//stackoverflow.com/a/3968411/391605から取得したコードに基づいていました

私の解決策次のコードを使用することでしたが、時々、それは単に解析せず、nilを返すことがわかりました。

//  Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
//  THIS DOESN'T WORK !  DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate* date = [formatter dateFromString:dateString];

「2012年10月12日」で無惨に失敗したことを覚えています...そのため、上記のより複雑な「parseDateString」関数をあきらめて使用しました。

私のポイントは...注意してください。

非常に基本的なNSDate関数の一部が正しく機能しない...

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