logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!

TUTORIAL JAVA + FLEX NA PRÁTICA (8) – Datas

Colocado por Janderson Cardoso na(s) categoria(s): #JAVA + FLEX NA PRÀTICA, Action Script 3.0, Adobe Flex, código fonte Flex, Código Fonte java, Componentes, Data java flex, Dicas, pratica java flex, TUTORIAL FLEX, TUTORIAL JAVA em 01 25th, 2010 | 2 Comentários

 TUTORIAL JAVA + FLEX NA PRÁTICA (8)   Datas

“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:

PLAIN TEXT
JAVA:

  1. @Temporal(TemporalType.DATE)
  2.  
  3. private Date dataFundacao;
  4.  
  5. public Date getDataFundacao() {
  6.  
  7. return dataFundacao;
  8.  
  9. }
  10.  
  11. public void setDataFundacao(Date dataFundacao) {
  12.  
  13. this.dataFundacao = dataFundacao;
  14.  
  15. }

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:

PLAIN TEXT
ACTIONSCRIPT:

  1. 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:

PLAIN TEXT
ACTIONSCRIPT:

  1. package com.saberprogramar.components
  2.  
  3. {
  4.  
  5. import com.saberprogramar.utils.Util;
  6.  
  7. import mx.controls.DateField;
  8.  
  9. import mx.events.FlexEvent;
  10.  
  11. public class DateFieldpt extends DateField
  12.  
  13. {
  14.  
  15. private const diasNomes:Array = [“D”,“S”,“T”,“Q”,“Q”,“S”,“S”];
  16.  
  17. private const mesesNomes:Array = [“Janeiro”,“Fevereiro”,“Março”,“Abril”,“Maio”,“Junho”,“Julho”,“Agosto”,“Setembro”,“Outubro”,“Novembro”,“Dezembro”];
  18.  
  19. public function DateFieldpt() {
  20.  
  21. super();
  22.  
  23. this.width=95;
  24.  
  25. dayNames=diasNomes;
  26.  
  27. monthNames=mesesNomes;
  28.  
  29. formatString=“DD/MM/YYYY”;
  30.  
  31. restrict=“0-9″;
  32.  
  33. editable=true;
  34.  
  35. showToday=true;
  36.  
  37. text = Util.dateToString(new Date());
  38.  
  39. addEventListener(FlexEvent.VALUE_COMMIT,completar);
  40.  
  41. }
  42.  
  43. private function completar(event:FlexEvent):void {
  44.  
  45. var str:String = event.target.text as String;
  46.  
  47. if ( str.charAt(2) != “/” || str.charAt(5) != “/” ) {
  48.  
  49. var mask:String;
  50.  
  51. var dataAtual:Date = new Date();
  52.  
  53. if ( str.length == 2 ) {
  54.  
  55. mask = str.substr(0, 2) + “/” +
  56.  
  57. (dataAtual.getMonth()+1).toString() + “/” +
  58.  
  59. dataAtual.getFullYear();
  60.  
  61. event.target.text = mask;
  62.  
  63. }
  64.  
  65. else if ( str.length == 4 ) {
  66.  
  67. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  68.  
  69. dataAtual.getFullYear().toString();
  70.  
  71. event.target.text = mask;
  72.  
  73. }
  74.  
  75. else if ( str.length == 6 ) {
  76.  
  77. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  78.  
  79. str.substr(4, 4);
  80.  
  81. event.target.text = mask;
  82.  
  83. }
  84.  
  85. else if ( str.length == 8 ) {
  86.  
  87. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  88.  
  89. str.substr(4, 4);
  90.  
  91. event.target.text = mask;
  92.  
  93. }
  94.  
  95. }
  96.  
  97. }
  98.  
  99. }
  100.  
  101. }

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:

PLAIN TEXT
ACTIONSCRIPT:

  1. package com.saberprogramar.utils
  2.  
  3. {
  4.  
  5. import mx.formatters.DateFormatter;
  6.  
  7. public class Util
  8.  
  9. {
  10.  
  11. public static function stringToDate(data:String):Date{
  12.  
  13. if (data != “”) {
  14.  
  15. var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
  16.  
  17. return new Date(novaData);
  18.  
  19. }
  20.  
  21. else {
  22.  
  23. return null;
  24.  
  25. }
  26.  
  27. }
  28.  
  29. public static function dateToString(data:Date):String{
  30.  
  31. var format:DateFormatter = new DateFormatter();
  32.  
  33. format.formatString = “DD/MM/YYYY”;
  34.  
  35. return format.format(data);
  36.  
  37. }
  38.  
  39. }
  40.  
  41. }

pronto, agora é moleza,adicionamos um novo campo na view que é o nosso componente customizado:

PLAIN TEXT
CODE:

  1. <mx:FormItem label=“Data Fundação:” required=“true”>
  2.                     <components:DateFieldpt id=“txtDataFundcao”
  3.                         text=“{Util.dateToString(cidade.dataFundacao)}” tabIndex=“4″ />
  4.                 </mx:FormItem>

e pra finalizar em nossa action na function confirm adicionamos isso:

PLAIN TEXT
ACTIONSCRIPT:

  1. 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:

PLAIN TEXT
ACTIONSCRIPT:

  1. public static function stringToDate(data:String):Date{
  2.  
  3. if (data != “”) {
  4.  
  5. var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
  6.  
  7. var dateTime:Date = new Date(novaData);
  8.  
  9. dateTime.setHours(12,0,0,0);
  10.  
  11. return dateTime;
  12.  
  13. }
  14.  
  15. else {
  16.  
  17. return null;
  18.  
  19. }
  20.  
  21. }

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.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

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

 TUTORIAL JAVA + FLEX NA PRÁTICA (8)   Datas



Veja o post original no blog do autor aqui!  

Janderson Cardoso

Escrito por Janderson Cardoso @ http://www.jandersonfc.com/
Saiba mais sobre o autor na sua pagina de perfil
Outros posts do autor:
» o Tweetdeck não é mais Adobe AIR
» Sou Papai, Murilo chegou!
» #Dica1 JAVA - por onde começar?

Comentários ( 2 )
 

Bem, tive muitas dores de cabeça com o flex com relação a datas, principalmente no quesito de horário de verão. Em um dos sistemas que trabalhei utilizei a mesma pog do seu exemplo.
Porém em outro sistema, um sistema hospitalar onde datas são algo critico, onde era necessário informações de hora, o negócio esquentou. Imagine um paciente que necessita tomar um medicamento de 4 em 4 horas para ter uma sobrevida, onde a ultima dosagem foi as 20:00 e o flex reajusta automaticamente (sem ao menos me perguntar) o valor para para 23:00?
Quer pensar em datas? Imagine um mês com noites mal dormidas com um sistema critico em produção e vc tendo que ajeitar problemas de horas Pensou?
Solução? Transitar como String.

Pronto. Falei!

Aureo juntou estes bytes...

Olá Aureo com essas justificativas fui mais que convencido do pq transitar como string…hehe recebi um dica que trabalhando com datas UTC resolve esse problema, ainda não testei mas pode ser uma outra solução válida…

Obrigado pelo seu comentário!

Cumps.

jandersonfc juntou estes bytes...
Deixe um comentário



Spam Protection by WP-SpamFree

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2756 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com