Problemas com Data - Valor passado do flex para o java diferentes. [RESOLVIDO]

5 respostas
jrcardoso007

Amigos se puderem me ajudar eu agradeço muito.
Acho que como a maioria no inicio um dos maiores problemas com o desenvolvimento é trabalhar com datas.
Segue um print da tela de cadastro de funcionários que estou fazendo em Flex com java, estou encaminhando tambem tanto a classe flex como a java para terem uma noção melhor.
Como podem notar tenho uma mensagem enviada pelo Alert no Flex e um JOptionPane no java, para tentar demonstrar o meu problema.
O que estou fazendo é o seguinte.
No flex, carrego uma classe ActionScript com a estrutura dos dados que tenho em minha tela.
Passo este objeto para o Java onde lá tenho uma classe com a mesma estrutura.
O problema é que antes de chamar a classe java, estou analisando o valor do campo data de nascimento, que contem o valor 21 jan 1974 e a primeira coisa que faço na classe java e verificar o valor do mesmo campo. Mas dentro do java ele esta carregado como 20 01 1974, portando com o valor do dia errado.
Se alguém puder me dar uma dica do que pode estar acontecendo eu agradeço.
E depois de resolver isso, vou gravar estas informações no banco de dados, como eu consigo colocar a data no formato correto dentro do java, pois ela esta mostrando ano/mês/dia e para carregar o banco eu preciso mudar para dia/mês/ano.
Desde ja agradeço a atenção.

5 Respostas

R

Oi, vamos ver se te ajuda.
Para trabalhar com a data criei um custom para o dateField

package custom{
 
import mx.controls.DateField;
import mx.events.FlexEvent;
 
public class DataFieldPt extends DateField{
 	private const diasNomes:Array = ["D","S","T","Q","Q","S","S"];
 	private const mesesNomes:Array = ["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"];
 
		public function DataFieldPt() {
 			super();
 			this.width=95;
 			dayNames=diasNomes;
 			monthNames=mesesNomes;
 			formatString="DD/MM/YYYY";
 			restrict="0-9";
 			editable=true;
 			showToday=true;
			yearNavigationEnabled=true;
 			// Mostrar Data Atual text=UtilDateField.dateToString(new Date());
			addEventListener(FlexEvent.VALUE_COMMIT,completar);
		}

		private static function completar(event:FlexEvent):void {
 			var str:String = event.target.text as String; 
			if ( str.charAt(2) != "/" || str.charAt(5) != "/" ) { 
				var mask:String; 
				var dataAtual:Date = new Date(); 
				if ( str.length == 2 ) { 
					mask = str.substr(0, 2) + "/" + (dataAtual.getMonth()+1).toString() + "/" + dataAtual.getFullYear();
					event.target.text = mask; 
				}
 				else if ( str.length == 4 ) {
 						mask = str.substr(0, 2) + "/" + str.substr(2,2) + "/" +
 						dataAtual.getFullYear().toString();
 						event.target.text = mask;
 					}
 					else if ( str.length == 6 ) {
 							mask = str.substr(0, 2) + "/" + str.substr(2,2) + "/" +
 							str.substr(4, 4);
							event.target.text = mask;
 						}
 						else if ( str.length == 8 ) {
 								mask = str.substr(0, 2) + "/" + str.substr(2,2) + "/" +
 								str.substr(4, 4);
 								event.target.text = mask;
 							}
 						}
 					}
 				}
 		}

Já no Usuarios.as considero a data como uma String

public var	dt_nasc:String;

E qdo qro carregar as informações faço o seguinte:

ti_dt_nasc.text = UtilDateField.StringToDate(dados.dt_nasc);

Espero ter ajudado :wink:

jrcardoso007

Muito obrigado rosequadra.
Vou implementar essa funcao no meu projeto e fazer os testes.

R

Ok, nos informe do resultado :wink:

jrcardoso007

Acabei de fazer os teste.

Deu tudo certo, quando trabalho com valor String no flex e java, não ocorreu de perder o valor para o dia. E a sua implementação da classe DataFieldPt, ficou show.
Mais uma vez, obrigado pela ajuda. :smiley: .

R

Que bom que deu tudo certo :wink:

Criado 18 de janeiro de 2012
Ultima resposta 26 de jan. de 2012
Respostas 5
Participantes 2