Basit bir şey gibi görünüyor ama bunu yapmanın bir yolunu bulamıyorum.
Birkaç farklı yöntem görmek harika olurdu.
Basit bir şey gibi görünüyor ama bunu yapmanın bir yolunu bulamıyorum.
Birkaç farklı yöntem görmek harika olurdu.
Yanıtlar:
@ 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];
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.
Örnekler genellikle öğrenmenin en kolay yoludur. İşte birkaç örnek.
Bu en kolayı.
let currentDateTime = Date()
// 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)
// 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)
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 .
NSDate belgelerine bakın . Sen kullanabilirsiniz dateFromString:
yöntemini NSDateFormatter
veya dateFromComponents:
yöntemini NSCalendar
.
init
?
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];
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 ...
setHour
,setMinute
,setSecond
daha hassas için vs..