Wydaje się, że to prosta rzecz, ale nie mogę znaleźć sposobu, aby to zrobić.
Byłoby wspaniale zobaczyć kilka różnych metod.
Wydaje się, że to prosta rzecz, ale nie mogę znaleźć sposobu, aby to zrobić.
Byłoby wspaniale zobaczyć kilka różnych metod.
Odpowiedzi:
@ Odpowiedź Chucka jest poprawna i poprowadź mnie do następującego kodu. Pomyślałem, że podzielę się:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Możesz tego użyć
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
Mam nadzieję, że to ci pomoże.
Jeśli mówisz o konkretnej dacie kalendarzowej, a nie o dacie w systemie UNIXy, prawdopodobnie potrzebujesz NSCalendar dateFromComponents:
.
Przykłady są często najłatwiejszym sposobem nauczenia się. Oto kilka przykładów.
Ten jest najłatwiejszy.
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)
Istnieją również inne sposoby tworzenia dat. Jeśli chcesz się tego nauczyć, a także jak wyświetlić datę, zobacz moją pełniejszą odpowiedź .
Zobacz dokumentację NSDate . Możesz użyć dateFromString:
metody NSDateFormatter
lub dateFromComponents:
metody NSCalendar
.
init
?
Znalazłem ten wątek, szukając odpowiedzi na to pytanie, ale potem znalazłem dobry przykład w jednej z moich książek Big Nerd Ranch Objective-C Programming. Chwała im, nie mnie.
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];
To śmieszne, prawda?
W połowie 2013 r. Firma Apple nadal nie zapewniła prostego sposobu ustawiania wartości NSDate.
Podczas mojego obecnego projektu na iPada nie mogłem uwierzyć, że muszę na chwilę zatrzymać produktywność, aby napisać własną klasę pomocniczą, aby uzyskać wartość roku z NSDate. To znaczy, daj spokój, to podstawowe rzeczy.
W każdym razie, oto klasa pomocnicza, której użyłem w moim projekcie, aby przekonwertować ciąg na wartość 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
Używając tego kodu, możesz ustawić wartość NSDate używając czegoś takiego:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Uwaga: ta funkcja została oparta na kodzie pobranym stąd: https://stackoverflow.com/a/3968411/391605
Moim rozwiązaniem było użycie następującego kodu, ale stwierdziłem, że czasami po prostu nie mógł przeanalizować i zwrócił 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];
Pamiętam, że nie powiodło się to marnie w dniu „12 października 2012 r.”… Dlatego zrezygnowałem i skorzystałem z bardziej skomplikowanej funkcji „parseDateString” pokazanej powyżej.
Chodzi mi o to ... bądź ostrożny.
Niektóre z bardzo podstawowych funkcji NSDate po prostu nie działają poprawnie ...
setHour
,setMinute
,setSecond
, itd. Dla drobniejszej ziarnistości.