“O QUE È BOM TEM QUE CONTINUAR” “O SENTIMENTO NÂO PODE PARAR”
Ano de 2010 começa e a vontade de ajudar a comunidade java e flex aumenta, e como podem perceber reativo hoje o Tutorial mais bombado do meu blog(JAVA + FLEX NA PRÀTICA) e os Motivos para reativar esse tutorial foi:
- Percebi que o público do meu blog é uma galera que busca um pouco além de pequenas dicas, gostaram é de tutorial.
- É mais fácil dar continuidade neste tutorial e mostrar algumas coisas mais avançadas ou continua de que começar outra, ter que ficar explicando d+, ter que no final ficar no básico.
- Muitas dúvidas por email que valem um novo post para explicações, atualizações e dicas.
- Quem sabe não sai um Ebook legal aí ,hein!
Então se prepara, pegue um café que no Tutorial Java + Flex Na Prática (8) – Datas você vai aprender como trabalhar com datas usando Flex e Java (já que essa é a dúvida campeão da galera por email).
Para você que ainda não leu esses artigos para facilitar lá vai
Esse artigo é continuação do
TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
TUTORIAL JAVA + FLEX NA PRÁTICA 2/6
TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus
Caso queira o projeto java é só baixar aqui (sem as libs).
Caso queira o projeto java é só baixar aqui.(com as libs).
Caso queira o projeto flex é só baixar aqui.
TRABALHANDO COM DATAS NO JAVA + FLEX
Sim, parece simples mas causa uma dúvida na galera que começa com JAVA + FLEX, seja na parte java com qual anotação usar ou seja no flex como pegar os valores em DD/MM/YYYY e converter em YYYY/MM/DD (já que é nesse formato que se armazena data no banco) . Tem muita gente que esquece que é data, se estressa e trata como se fosse string, nada contra mas se quiser pode aproveitar esse artigo para trabalhar Data como Data… vamos começar
A primeira coisa que vamos fazer é acrescentar um novo atributo na nossa entidade Cidade, vamos acrescentar a data de fundação(lógico que isso é redículo mas é um exemplo, ok) e com sua anotação correta.Vamos adicionar o atributo na nossa entidade:
simples não, apenas vale lembrar que o Date é o “java.util.Date” e não “java.sql.Date”, vamos agora pro flex que aqui acabou, perceberam como OO ajuda… mexemos em uma classe, o resto fica do jeito que está
No Flex adicionamos a atributo também na nossa entidade que é nosso clone da Cidade:
-
public var dataFundacao:Date;
Agora, vamos criar um componente customizado, na verdade vamos extender o componente data Padrão do Flex (o DateField) chamei de DateFieldpt, só um detalhe, achei esse componente na net e não vou dar créditos pois não sei quem fez, então dentro do nosso projeto vamos criar um package components e vamos adicionar esse nosso componente, vamos ao código:
-
package com.saberprogramar.components
-
-
{
-
-
import com.saberprogramar.utils.Util;
-
-
import mx.controls.DateField;
-
-
import mx.events.FlexEvent;
-
-
public class DateFieldpt 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 DateFieldpt() {
-
-
super();
-
-
this.width=95;
-
-
dayNames=diasNomes;
-
-
monthNames=mesesNomes;
-
-
formatString=“DD/MM/YYYY”;
-
-
restrict=“0-9″;
-
-
editable=true;
-
-
showToday=true;
-
-
text = Util.dateToString(new Date());
-
-
addEventListener(FlexEvent.VALUE_COMMIT,completar);
-
-
}
-
-
private 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;
-
-
}
-
-
}
-
-
}
-
-
}
-
-
}
além desse componente precisamos de uma função que converta data para string e string para data, então crie mais um package utils e crie sua classe(sugeri Util.as) com essas funções, vamos ao código:
-
package com.saberprogramar.utils
-
-
{
-
-
import mx.formatters.DateFormatter;
-
-
public class Util
-
-
{
-
-
public static function stringToDate(data:String):Date{
-
-
if (data != “”) {
-
-
var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
-
-
return new Date(novaData);
-
-
}
-
-
else {
-
-
return null;
-
-
}
-
-
}
-
-
public static function dateToString(data:Date):String{
-
-
var format:DateFormatter = new DateFormatter();
-
-
format.formatString = “DD/MM/YYYY”;
-
-
return format.format(data);
-
-
}
-
-
}
-
-
}
pronto, agora é moleza,adicionamos um novo campo na view que é o nosso componente customizado:
-
<mx:FormItem label=“Data Fundação:” required=“true”>
-
<components:DateFieldpt id=“txtDataFundcao”
-
text=“{Util.dateToString(cidade.dataFundacao)}” tabIndex=“4″ />
-
</mx:FormItem>
e pra finalizar em nossa action na function confirm adicionamos isso:
-
cidade.dataFundacao = Util.stringToDate(txtDataFundcao.text);
pronto, testa aí e você vai ver que já está funcionando, mas espera aí, ainda falta uma grande dica.
O HORÀRIO DE VERÂO BRASILEIRO!
Você vai testar agora, vai ver que está funcionando, vai ficar feliz e depois de um tempo pode acontecer de ter problemas com o nosso bendito horário de verão, explico, no Brazil não temos dia certo pra começar nem para terminar o bendito horário de verão, então como o sdk do java não utiliza a informaçao do sistema operacional(Windows, Linux, Mac) e sim do prório sdk, o sdk fica perdido com o nosso horário de verão. Mas como saber que estou tendo problemas?
- Quando você mandar gravar uma data (23/01/2010) essa data vai retroceder um dia (22/01/2010). Putz kara, é exatamente o que está me acontecendo, como eu resolvo isso?
simples
um POG do bem..hehe quando você manda gravar uma data como fazemos aqui a data vai com o time (00:00:00), então quando chega no java o time volta, consequentemente um dia anteior com o time (22:00:00 ou as 23:00:00), então a forma mais rápida foi setar o time para 12:00:00 e por mais que o sdk volte o time ainda será o mesmo dia
, então na nossa classe Util na função stringToDate ficará assim:
-
public static function stringToDate(data:String):Date{
-
-
if (data != “”) {
-
-
var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
-
-
var dateTime:Date = new Date(novaData);
-
-
dateTime.setHours(12,0,0,0);
-
-
return dateTime;
-
-
}
-
-
else {
-
-
return null;
-
-
}
-
-
}
fica aí a dica, aguardem que vem novos artigos para este tutorial, como atualização de swiz e relatórios integrando JAVA + FEX + IREPORT, até a próxima e bons estudos.
Cumps.
Similar Posts:
- Formatando e Somando Datas no Flex
- TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
- TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
- TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
- TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus





