Parece uma coisa simples, mas não consigo encontrar uma maneira de fazer isso.
Seria ótimo ver alguns métodos diferentes.
Parece uma coisa simples, mas não consigo encontrar uma maneira de fazer isso.
Seria ótimo ver alguns métodos diferentes.
Respostas:
A resposta de @ Chuck está correta e me leva ao seguinte código. Pensei em compartilhar:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Você pode usar isso
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
Espero que isso ajude você.
Os exemplos costumam ser a maneira mais fácil de aprender. Aqui estão alguns exemplos.
Este é o mais fácil.
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)
Existem outras maneiras de criar datas também. Se você quiser aprender isso, e também como exibir uma data, veja minha resposta mais completa .
Consulte a documentação para NSDate . Você pode usar o dateFromString:
método de NSDateFormatter
ou o dateFromComponents:
método de NSCalendar
.
init
?
Eu encontrei este tópico enquanto procurava uma resposta para esta pergunta, mas então eu encontrei um bom exemplo em um meu livro Big Nerd Ranch Objective-C Programming. Crédito para eles, não para mim.
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];
É ridículo, não é?
Meados de 2013 e a Apple ainda não forneceram uma maneira simples de definir um valor NSDate.
Durante meu projeto atual do iPad, não pude acreditar que tive que interromper a produtividade por um tempo para escrever minha própria classe de ajudante para obter o valor de ano de um NSDate. Quero dizer, vamos, isso é básico.
De qualquer forma, aqui está a classe auxiliar que usei em meu projeto, para converter uma string em um valor 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
Usando este código, você pode definir um valor NSDate usando algo como:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Nota: esta função foi baseada no código retirado daqui: https://stackoverflow.com/a/3968411/391605
Minha solução era usar o código a seguir, mas descobri que às vezes ele simplesmente não analisava e retornava 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];
Lembro que falhou miseravelmente em "12 de outubro de 2012" ... é por isso que desisti e usei a função mais complicada "parseDateString" mostrada acima.
Meu ponto é ... tenha cuidado.
Algumas das funções básicas do NSDate simplesmente não funcionam corretamente ...
setHour
,setMinute
,setSecond
, etc. de granularidade.