Conversão NSDate para NSString


Respostas:


468

E se...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

//unless ARC is active
[formatter release];

Swift 4.2:

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}

24
Isso produzirá um vazamento de memória, pois o formatador nunca é liberado.
mana

6
Não use initcom NSDateFormatter. Foi removido após o iOS 3.2 . (E se você usar um método de classe em vez disso, ele vai autorelease e você não terá o problema de vazamento, também.)
zekel

3
Realmente sugiro olhar abaixo em localizedStringFromDate
Oded Ben Dov

4
@zekel Não tenho certeza do que a documentação costumava dizer, mas agora sugere initem vários lugares.
Neal Ehardt

2
Eu teria autoreleased-lo (3 anos)
Adam Waite

283

Não sei como todos nós perdemos isso: localizedStringFromDate: dateStyle: timeStyle:

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                      dateStyle:NSDateFormatterShortStyle 
                                                      timeStyle:NSDateFormatterFullStyle];
NSLog(@"%@",dateString);

saídas '13 / 06/12 00:22:39 GMT + 03: 00 '


uma vez gravada em uma string, existe uma maneira legal de lê-la dessa maneira? (utilizando esses enumerações NSDateFormatter)
Fonix

@Fonix Acho que não - esta é uma string localizada, o que significa que depende das configurações de localidade do usuário. Você nunca deve armazenar datas em um formato como este, pois as configurações podem mudar a qualquer momento.
Viktor Benei

É bom se você usar o formatador raro. Caso contrário, você precisa de um cache.
Mike Glukhov

In swift: deixe dateString = NSDateFormatter.localizedStringFromDate (date, dateStyle: .ShortStyle, timeStyle: .FullStyle);
Cristan

1
Reduziu o número de códigos e, graças a sua perfeita trabalhando
Preetha

87

Espero agregar mais valor fornecendo o formatador normal, incluindo o ano, o mês e o dia com o horário. Você pode usar este formatador por mais de um ano

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

24

existem vários NSDateajudantes na web, eu costumo usar:

https://github.com/billymeltdown/nsdate-helper/

Leia-me abaixo:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

Isso produz os seguintes tipos de saída:

3:42 AM  if the date is after midnight today
Tuesday  if the date is within the last seven days
Mar 1  if the date is within the current calendar year
Mar 1, 2008  else ;-)

Esta é definitivamente uma ótima solução. Não precisa perder tempo se preocupando com a aparência das datas e pode continuar com a codificação. :)
kyleturner 15/10/12

13

Em Swift:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy"
var dateString = formatter.stringFromDate(YourNSDateInstanceHERE)

No Swift 3.0, deixe formatter = DateFormatter () formatter.dateFormat = "aaaa" retornar formatter.string (from: date)
Victor Laerte

8
  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);

1
"AAAA" fornece o ano para a semana atual, não para o dia. Use "aaaa" em vez disso. Veja esta pergunta para mais informações. stackoverflow.com/questions/15133549/…
Steve Moser

Obrigado Steve Moser :)
SR Nayak

4

Se você não tiver NSDate -descriptionWithCalendarFormat:timeZone:locale:disponível (não acredito que o iPhone / Cocoa Touch inclua isso), talvez seja necessário usar o strftime e o monkey com algumas strings no estilo C. Você pode obter o registro de data e hora do UNIX NSDateusando NSDate -timeIntervalSince1970.


4
+(NSString*)date2str:(NSDate*)myNSDateInstance onlyDate:(BOOL)onlyDate{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if (onlyDate) {
        [formatter setDateFormat:@"yyyy-MM-dd"];
    }else{
        [formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    }

    //Optionally for time zone conversions
    //   [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

    NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];
    return stringFromDate;
}

+(NSDate*)str2date:(NSString*)dateStr{
    if ([dateStr isKindOfClass:[NSDate class]]) {
        return (NSDate*)dateStr;
    }

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateStr];
    return date;
}

3

Basta adicionar esta extensão:

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}

2

Se você estiver no Mac OS X, pode escrever:

NSString* s = [[NSDate date] descriptionWithCalendarFormat:@"%Y_%m_%d_%H_%M_%S" timeZone:nil locale:nil];

No entanto, isso não está disponível no iOS.


1

resposta rápida 4

static let dateformat: String = "yyyy-MM-dd'T'HH:mm:ss"
public static func stringTodate(strDate : String) -> Date
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    let date = dateFormatter.date(from: strDate)
    return date!
}
public static func dateToString(inputdate : Date) -> String
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    return formatter.string(from: inputdate)

}

0
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:myNSDateInstance];
NSInteger year = [components year];
// NSInteger month = [components month];
NSString *yearStr = [NSString stringWithFormat:@"%ld", year];

0

Defina seu próprio utilitário para formatar sua data, formato de data requerido, por exemplo.

NSString * stringFromDate(NSDate *date)  
 {   NSDateFormatter *formatter
    [[NSDateFormatter alloc] init];  
    [formatter setDateFormat:@"MM ∕ dd ∕ yyyy, hh꞉mm a"];    
    return [formatter stringFromDate:date]; 
}

0

É um formato rápido:

func dateFormatterWithCalendar(calndarIdentifier: Calendar.Identifier, dateFormat: String) -> DateFormatter {

    let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: calndarIdentifier)
    formatter.dateFormat = dateFormat

    return formatter
}


//Usage
let date = Date()
let fotmatter = dateFormatterWithCalendar(calndarIdentifier: .gregorian, dateFormat: "yyyy")
let dateString = fotmatter.string(from: date)
print(dateString) //2018
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.