Ir para conteúdo
Visualizar no app

Uma forma melhor de navegar. Saiba mais.

MM Fórum

Um app em tela cheia na sua Tela de Início com notificações push, avisos e mais.

Para instalar este app no iOS/iPadOS
  1. Toque no ícone de Compartilhamento no Safari
  2. Role o menu e toque em Adicionar à Tela de Início.
  3. Toque em Adicionar no canto superior direito.
Para instalar este app no Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Modificar formato de data recebida de uma XML

Featured Replies

Postado

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

  • Respostas 11
  • Visualizações 1.8k
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Postado

é 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

Postado
  • Autor

é 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]

Postado

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

uso assim no twitter sem problema ...

Editado por Artur Felipe

Postado
  • Autor

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

Postado

é, 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

Postado
  • Autor

é, 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.

Postado

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

Postado
  • Autor

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

Postado
  • Autor

É, 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]

Postado
  • Autor

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?

Postado

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]

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…

Quem Está Navegando 0

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

Conta

Navegação

Buscar

Buscar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.