iPhone OS: Belirli bir tarih için nasıl NSDate oluşturabilirim?


Yanıtlar:


211

@ Chuck'ın cevabı doğru ve beni aşağıdaki koda yönlendir. Paylaşacağımı düşündüm:

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

7
Not da var setHour, setMinute, setSeconddaha hassas için vs..
devios1

19

Bunu kullanabilirsin

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

Umarım bu size yardımcı olur.


"DateFromString" işlevini kullanırken dikkatli olun - mükemmel bir şekilde geçerli olan bazı tarihlerde perişan bir şekilde başarısız olacağını gördüm. Tarih dizelerini ayrıştırmanın alternatif bir yolu için aşağıdaki yazıma bakın.
Mike Gledhill

Oded Ben'in bahsetme şekli de başka bir en iyi yoldur ..... NSDateComponents * comps = [[NSDateComponents alloc] init]; [Comps setDay: 10]; [comps setMonth: 10]; [comps setYear: 2010]; NSDate * date = [[NSCalendar currentCalendar] dateFromComponents: comps];
Kamleshwar

16

UNIXy tarihinden ziyade belirli bir takvim tarihinden bahsediyorsanız, muhtemelen NSCalendar'ın tarihini istersiniz dateFromComponents:.


9

Swift Örnekleri

Örnekler genellikle öğrenmenin en kolay yoludur. İşte birkaç örnek.

Şimdi

Bu en kolayı.

let currentDateTime = Date()

Şubat 20, 2017

// 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)

1 Nisan 1976

// 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)

Daha fazla ayrıntıya mı ihtiyacınız var?

Tarih oluşturmanın başka yolları da var. Bunları öğrenmek ve bir tarihi nasıl göstereceğinizi öğrenmek istiyorsanız , o zaman tam cevabıma bakın .


8

NSDate belgelerine bakın . Sen kullanabilirsiniz dateFromString:yöntemini NSDateFormatterveya dateFromComponents:yöntemini NSCalendar.


Şu tarihi almaya devam ediyorum: "1969-12-31 16:00:00" -0800 string'den tarihi kullanırken
nickthedude

NSDateFormatter * dateFormatter = [[NSDateFormatter tahsisi] init]; NSDate * capturedStartDate = [dateFormatter dateFromString: @ "2 Ocak 2001"]; NSLog (@ "% @", [capturedStartDate açıklaması]); çıktı: 2010-04-05 10: 49: 47.688 Takvim2 [21339: 207] 1969-12-31 16:00:00 -0800
nickthedude

Belki de tarih formatındaki düz yerine bazı parametreler ayarlamanız gerekiyor init?
zoul

3

Bu konuyu bu soruya bir cevap ararken buldum ama sonra Big Nerd Ranch Objective-C Programlama kitabımda iyi bir örnek buldum. Onlara kredi, bana değil.

  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

Gülünç, değil mi?

2013 ortası ve Apple hala NSDate değeri belirlemenin basit bir yolunu sunmadı.

Mevcut iPad projem sırasında, NSDate'ten Yıl değerini almak için kendi yardımcı sınıfımı yazmak için bir süre üretkenliği durdurmam gerektiğine inanamadım. Demek istediğim, hadi, bu temel şeyler.

Her neyse, işte bir dizeyi NSDate değerine dönüştürmek için projemde kullandığım yardımcı sınıf:

@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

Bu kodu kullanarak, aşağıdaki gibi bir şey kullanarak bir NSDate değeri ayarlayabilirsiniz:

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

Not: Bu işlev, buradan alınan koda dayanıyordu: https://stackoverflow.com/a/3968411/391605

Benim çözümüm olmuştu aşağıdaki kodu kullanabilirsiniz, ama bunu buldum bazen , sadece ayrıştırmak olmaz ve dönecekti 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];

"12 Ekim 2012" de başarısız bir şekilde başarısız olduğunu hatırlıyorum ... bu yüzden pes ettim ve yukarıda gösterilen daha karmaşık "parseDateString" işlevini kullandım.

Demek istediğim ... dikkatli olun.

Çok temel NSDate işlevlerinden bazıları düzgün çalışmıyor ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.