Gabriel Vincent Postado 13 de janeiro de 2012 Denunciar Compartilhar Postado 13 de janeiro de 2012 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 13 de janeiro de 2012 Denunciar Compartilhar Postado 13 de janeiro de 2012 (editado) é 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 13 de janeiro de 2012 por Artur Felipe Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 13 de janeiro de 2012 Autor Denunciar Compartilhar Postado 13 de janeiro de 2012 é 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 13 de janeiro de 2012 Denunciar Compartilhar Postado 13 de janeiro de 2012 (editado) qual a string que vem do xml ? se puder colar o trecho do xml melhor ainda ... uso assim no twitter sem problema ... Editado 13 de janeiro de 2012 por Artur Felipe Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 13 de janeiro de 2012 Autor Denunciar Compartilhar Postado 13 de janeiro de 2012 (editado) 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 13 de janeiro de 2012 por Gabriel Vincent Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 13 de janeiro de 2012 Denunciar Compartilhar Postado 13 de janeiro de 2012 é, 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 13 de janeiro de 2012 Autor Denunciar Compartilhar Postado 13 de janeiro de 2012 é, 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 13 de janeiro de 2012 Denunciar Compartilhar Postado 13 de janeiro de 2012 (editado) 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: [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 13 de janeiro de 2012 por Artur Felipe Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 13 de janeiro de 2012 Autor Denunciar Compartilhar Postado 13 de janeiro de 2012 (editado) 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: [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 13 de janeiro de 2012 por Gabriel Vincent Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 13 de janeiro de 2012 Autor Denunciar Compartilhar Postado 13 de janeiro de 2012 É, 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 +0000String2: 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 14 de janeiro de 2012 Autor Denunciar Compartilhar Postado 14 de janeiro de 2012 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 14 de janeiro de 2012 Denunciar Compartilhar Postado 14 de janeiro de 2012 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe do debate
Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.