Ir para conteúdo
  • Cadastre-se

Modificar formato de data recebida de uma XML


Posts Recomendados

Olá a todos!

Estou fazendo um App em que pego uma XML e preencho uma TableView com ela. O subtítulo de cada cell é uma data. Mas a data chega nessa formato: Fri, 11 Nov 2011 13:11:33 +0000.

Como é uma NSString, acho que o dateFormatter não é capaz de formatá-la. Alguma sugestão de como eu posso pegar essa data com outro formato?

Obrigado,

Gabriel Vincent

Link para o comentário
Compartilhar em outros sites

  • Respostas 11
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Dias Populares

Top Postadores Neste Tópico

é possível sim, só setar o formato de data e converter a string para nsdate, algo do tipo ...

NSDateFormatter *df = [[NSDateFormatter alloc] init];

//Sat, 01 Oct 2011 22:26:28 +0000

[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];

NSDate *datefrom = [df dateFromString:[values valueForKey:@"created_at"]];

ai só formatar o NSDate no formato que preferir ...

Editado por Artur Felipe
Link para o comentário
Compartilhar em outros sites

é possível sim, só setar o formato de data e converter a string para nsdate, algo do tipo ...

NSDateFormatter *df = [[NSDateFormatter alloc] init];

//Sat, 01 Oct 2011 22:26:28 +0000

[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];

NSDate *datefrom = [df dateFromString:[values valueForKey:@"created_at"]];

ai só formatar o NSDate no formato que preferir ...

Fiz seguinte:


NSDateFormatter *df = [[NSDateFormatter alloc] init];
//Sat, 01 Oct 2011 22:26:28 +0000
[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];
NSDate *datefrom = [df dateFromString:[[stories objectAtIndex:0]objectForKey:@"date"]];

NSString *dateString = [df stringFromDate:datefrom];

NSLog(@"Date: %@", dateString);
[/CODE]

[color=#0000cd][font=courier new,courier,monospace]dateString[/font][/color][font=courier new,courier,monospace][font=arial,helvetica,sans-serif][color=#000000] continua vindo nula.[/color][/font][/font]

Link para o comentário
Compartilhar em outros sites

qual a string que vem do xml ? se puder colar o trecho do xml melhor ainda ...

uso assim no twitter sem problema ...

XML:


<pubDate>Fri, 13 Jan 2012 12:25:49 +0000</pubDate>
[/CODE]

A string que eu pego dele sai exatamente assim:

[CODE]
NSString *string = [[NSString alloc] init];
string = [[stories objectIndex:indexPath.row] objectForKey:@"date"];
NSLog(@"Date: %@", string);
[/CODE]

e o output disso é: Fri, 13 Jan 2012 12:25:49 +0000

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

é, acabei de testar aqui e funciona ... pelo menos o problema não é nessa parte ...

// Formato Sat, 01 Oct 2011 22:26:28 +0000

NSString *str = @"Fri, 13 Jan 2012 12:25:49 +0000";

NSDateFormatter *df = [[NSDateFormatter alloc] init];

[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];

NSDate *datefrom = [df dateFromString:str];

NSLog(@"%@", datefrom);

//2012-01-13 17:21:10.062 Band[20429:18803] 2012-01-13 12:25:49 +0000

Link para o comentário
Compartilhar em outros sites

é, acabei de testar aqui e funciona ... pelo menos o problema não é nessa parte ...

// Formato Sat, 01 Oct 2011 22:26:28 +0000

NSString *str = @"Fri, 13 Jan 2012 12:25:49 +0000";

NSDateFormatter *df = [[NSDateFormatter alloc] init];

[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];

NSDate *datefrom = [df dateFromString:str];

NSLog(@"%@", datefrom);

//2012-01-13 17:21:10.062 Band[20429:18803] 2012-01-13 12:25:49 +0000

Usando exatamente esse código, sem modificar nada, datefrom está nulo.

Link para o comentário
Compartilhar em outros sites

tem algo muito errado então :) ...

usando esse código abaixo:


// Formato Orig: "Sat, 01 Oct 2011 22:26:28 +0000"
NSString *str = @"Fri, 13 Jan 2012 12:25:49 +0000";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];
NSDate *datefrom = [df dateFromString:str];
NSLog(@"NSDate: %@", datefrom);
//2012-01-13 17:21:10.062 Band[20429:18803] NSDate: 2012-01-13 12:25:49 +0000
[df setDateFormat:@"yyyy/MM/dd"];
str = [df stringFromDate:datefrom];
NSLog(@"String Formatada: %@", str);
//2012-01-13 17:31:41.884 Band[20562:18803] String Formatada: 2012/01/13
[/CODE]

a saída aqui é essa: :o

[color=#238036]//2012-01-13 17:21:10.062 Band[20429:18803] NSDate: 2012-01-13 12:25:49 +0000[/color]

[color=#238036]//2012-01-13 17:31:41.884 Band[20562:18803] String Formatada: 2012/01/13[/color]

Editado por Artur Felipe
Link para o comentário
Compartilhar em outros sites

tem algo muito errado então :) ...

usando esse código abaixo:


// Formato Orig: "Sat, 01 Oct 2011 22:26:28 +0000"
NSString *str = @"Fri, 13 Jan 2012 12:25:49 +0000";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];
NSDate *datefrom = [df dateFromString:str];
NSLog(@"NSDate: %@", datefrom);
//2012-01-13 17:21:10.062 Band[20429:18803] NSDate: 2012-01-13 12:25:49 +0000
[df setDateFormat:@"yyyy/MM/dd"];
str = [df stringFromDate:datefrom];
NSLog(@"String Formatada: %@", str);
//2012-01-13 17:31:41.884 Band[20562:18803] String Formatada: 2012/01/13
[/CODE]

a saída aqui é essa: :o

[color=#238036]//2012-01-13 17:21:10.062 Band[20429:18803] NSDate: 2012-01-13 12:25:49 +0000[/color]

[color=#238036]//2012-01-13 17:31:41.884 Band[20562:18803] String Formatada: 2012/01/13[/color]

Você tem razão, mas a única diferença do código que você escreveu pro que eu rodei é que eu substituí aquela string por

[color=#000000][[[/color][color=#739D59]stories[/color][color=#ffffff] [/color][color=#1e9dcc]objectAtIndex[/color][color=#000000]:[/color][color=#2f4f4f]storyIndex[/color][color=#000000]][/color][color=#ffffff] [/color]objectForKey[color=#000000]:[/color][color=#8d5f25]@"date"[/color][color=#000000]];[/color]

[size=3][color=#000000][font=arial,helvetica,sans-serif]Quando dou NSLog nisso, recebo a string exatamente com o mesmo formato que aquela que vc escreveu (Sat, 01 Oct 2011 22:26:28 +0000)[/font][/color][/size]

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

É, tem alguma coisa muito estranha acontecendo:

Input:


str = @"Fri, 13 Jan 2012 12:25:49 +0000";
NSLog(@"String1: %@", str);
NSLog(@"String2: %@", [[stories objectAtIndex:0] objectForKey:@"date"]);
[/CODE]

Output:

[CODE]
String1: Fri, 13 Jan 2012 12:25:49 +0000
String2: Fri, 13 Jan 2012 12:25:49 +0000
[/CODE]

Mas só funciona se eu fizer : [color=#006400]str[/color][color=#ffffff] [/color][color=#000000]=[/color][color=#ffffff] [/color]@"Fri, 13 Jan 2012 12:25:49 +0000"[color=#000000];[/color]

[size=4][font=arial,helvetica,sans-serif][color=#000000]Se eu fizer: [/color][/font][/size] [color=#006400]str[/color][color=#FFFFFF] [/color][color=#000000]=[/color][color=#FFFFFF] [/color][color=#000000][[[/color][color=#739d59]stories[/color][color=#ffffff] [/color]objectAtIndex[color=#000000]:[/color][color=#8c85cc]0[/color][color=#000000]] [/color]objectForKey[color=#000000]:[/color][color=#8d5f25]@"date"[/color]; [font=arial,helvetica,sans-serif][size=4]Não funciona! Como pode? São 2 strings idênticas.[/size][/font]

Link para o comentário
Compartilhar em outros sites

Beleza, consegui fazer funcionar. Agora tenho outro problema: esse formato que você me passou [df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"]; só funciona se eu setar a timezone pros EUA: [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; e isso faz com que minha hora apareça com uma diferença de fuso-horário. Não tem outro formato desse tipo pra transformar string em NSDate que seja compatível com a timezone do Brasil?

Link para o comentário
Compartilhar em outros sites

aqui eu simplesmente seto a timezone no NSDateFormatter ... o ultimo é um genérico que serve para pegar a timezone do usuário [NSTimeZone localTimeZone].


NSString *str = @"Fri, 13 Jan 2012 12:25:49 +0000";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];
NSDate *datefrom = [df dateFromString:str];
NSLog(@"NSDate: %@", datefrom);
[df setDateFormat:@"dd MMM yyyy HH:mm:ss ZZZZ"];

[df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
str = [df stringFromDate:datefrom];
NSLog(@"Timezone GMT: %@", str);

[df setTimeZone:[NSTimeZone timeZoneWithName:@"America/Recife"]];
str = [df stringFromDate:datefrom];
NSLog(@"Timezone America/Recife: %@", str);

[df setTimeZone:[NSTimeZone timeZoneWithName:@"Etc/GMT+5"]];
str = [df stringFromDate:datefrom];
NSLog(@"Timezone Etc/GMT+5: %@", str);

[df setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/London"]];
str = [df stringFromDate:datefrom];
NSLog(@"Timezone Europe/London: %@", str);

[df setTimeZone:[NSTimeZone localTimeZone]];
str = [df stringFromDate:datefrom];
NSLog(@"Timezone Local: %@", str);
[/CODE]

Saida:

[b]2012-01-14 19:45:57.103 Band[39633:18803] NSDate: 2012-01-13 12:25:49 +0000[/b]

[b]2012-01-14 19:45:57.104 [b]Band[/b][39633:18803] Timezone GMT: 13 Jan 2012 12:25:49 GMT[/b]

[b]2012-01-14 19:45:57.104 [b]Band[/b][39633:18803] Timezone America/Recife: 13 Jan 2012 09:25:49 GMT-03:00[/b]

[b]2012-01-14 19:45:57.105 [b]Band[/b][39633:18803] Timezone Etc/GMT+5: 13 Jan 2012 07:25:49 GMT-05:00[/b]

[b]2012-01-14 19:45:57.282 [b]Band[/b][39633:18803] Timezone Europe/London: 13 Jan 2012 12:25:49 GMT[/b]

[b]2012-01-14 19:45:57.283 [b]Band[/b][39633:18803] Timezone Local: 13 Jan 2012 09:25:49 GMT-03:00[/b]

Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



  • Estatísticas do Fórum

    • Total de Tópicos
      56.5k
    • Total de Posts
      466.1k
×
×
  • Criar Novo...