iPhone OS: Como faço para criar um nsdate para uma data específica?
-
24-09-2019 - |
Pergunta
Parece uma coisa simples, mas não consigo encontrar uma maneira de fazê -lo.
Seria ótimo ver alguns métodos diferentes.
Solução
A resposta de @chuck está correta e me levou ao código a seguir. Pensei em compartilhar:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Outras dicas
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ê.
Use scripts gerar scripts do SQL Management Studio e escolha as opções "Índices de script" (sob as opções avançadas de script)
Exemplos rápidos
Exemplos geralmente são a maneira mais fácil de aprender. Aqui estão alguns exemplos.
Agora
Este é o mais fácil.
let currentDateTime = Date()
20 de fevereiro de 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 de abril de 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)
Precisa de mais detalhes ...?
Existem outras maneiras de criar datas também. Se você quiser aprender isso, assim como exibição uma data, então Veja minha resposta mais completa.
Veja a documentação para Nsdate. Você pode usar o dateFromString:
método de NSDateFormatter
ou o dateFromComponents:
método de NSCalendar
.
Eu acho que importar ambas as tabelas em um banco de dados e usar que é provavelmente a maneira mais fácil de fazer isso (e você não precisa de pages-articles.xml
para isso).
Outra opção seria analisar manualmente os dois arquivos SQL sem importá-los para o banco de dados.Eu realmente criei uma biblioteca para fazer exatamente isso em .net .
.É ridículo, não é?
Meados de 2013 e maçã ainda Não forneceu uma maneira simples de definir um valor nsdate.
Durante o meu projeto atual do iPad, eu não podia acreditar que precisava parar a produtividade por um tempo para escrever minha própria classe ajudante para obter o valor do ano de um nsdate. Quero dizer, vamos lá, isso é coisa básica.
De qualquer forma, aqui está a classe ajudante que usei no 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 estava para usar o seguinte código, mas eu achei que as vezes, simplesmente não iria analisar e retornaria nada.
// 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 -me de que falhou miseravelmente em "12 de outubro de 2012" ... e é por isso que desisti e usei a função "Parsedatestring" mais complicada mostrada acima.
Meu ponto é ... tenha cuidado.
Algumas das funções nsdate muito básicas simplesmente não funcionam corretamente ...