Ops... peguei um bug na implementação. Nos métodos dropdown_changeHandler, dateGrid_changeHandler do DateField e DateChooser respectivmente, trocar o código inteiro por:
var selectedDateRef:Date = event.target.selectedDate; if (selectedDateRef && selectedDateRef.hours) { selectedDateRef.time += (24 - selectedDateRef.hours )*60*60*1000; } Senão dispara o evento 2 vezes e desmarca o dia... Henrique F. Marino On Nov 27, 2007 5:44 PM, Henrique <[EMAIL PROTECTED]> wrote: > Ok, deixando de lado a minha interpretação, que não foi a correta, vamos > voltar ao assunto: > > Pesquisando mais sobre o problema do fuso horário e o comportamento do > Date no Flash Player (Date é nativo), descobri que ao criar uma data, new > Date(ano, mês, dia, 0, 0, 0) onde o ano, mês e dia representem o PRIMEIRO > dia do horário de verão as 0hs 0min e 0s temos o seguinte comportamento: > > > > Ex. 06/11/2005 (este dia pode não ser o inicio do horário de verão para > todos os computadores, depende do calendário do SO) > > var date:Date = new Date(2005, 10, 6, 0, 0, 0); > > trace(date) à Sat Nov 5 23:00:00 GMT-0300 2005 > > > > Ou seja, quando criamos uma nova instancia de Date com o primeiro dia do > horário de verão, o Flash player cria uma data que representa o ultimo dia > antes do horário de verão. Pensando no comportamento de Data, não existe 0hs > do primeiro dia de horário de verão pois depois das 23:59:59hs do dia > anterior, adiantamos 1h no nosso relógio o que justifica não termos 0hs. > > Agora se pensarmos no comportamento do Date no Flash player, creio que > este não seja o mais correto (a minha opinião é que a data correta seria Sun > Nov 6 01:00:00 GMT-0200 2005, o mesmo comportamento do JAVA), e desta > forma nunca conseguiremos criar a data 6/11/2005 usando o construtor > Date(2005, 10, 6). E é exatamente isso que acontece ao selecionarmos o dia > 6/11/2005 no nosso DateField! > > Ao meu ver temos realmente um bug, que não sei acontece em outras versões > do Flash Player! > > Para solucionar o problema do DateField e do DateChooser ficou fácil, mais > não consigo ver uma maneira fácil de mudar o comportamento do Date, já que > este é nativo e não pode ser estendido. > > Uma possível solução, já dada aqui na lista, seria desativar o horário de > verão no SO, o que seria possível em um ambiente corporativo totalmente > controlado, mais não é o que ocorre na minha aplicação e que, como a do > Daniel, depende muito do dia, já que se trata de um sistema financeiro. > > > > Acho que seria interessante todos que estão preocupados com esta questão > de data tentar encontrar uma solução! > > > > Segue a minha solução para o DateField e DateChoser: > > > > > _______________________________________________________________________________________ > > MyDateField: > > > ________________________________________________________________________________________ > > > > *package* > > { > > *import* mx.controls.DateChooser; > > *import* mx.controls.DateField; > > *import* mx.core.mx_internal; > > *import* mx.events.CalendarLayoutChangeEvent; > > > > *use* *namespace* mx_internal; > > > > *public* *class* MyDateField *extends* DateField > > { > > *private* *var* dropdownRef:DateChooser; > > > > *override* *protected* *function* createChildren():*void* > > { > > *super*.createChildren(); > > > > dropdownRef = *this*.dropdown; > > dropdownRef.addEventListener(CalendarLayoutChangeEvent.CHANGE, > dropdown_changeHandler, *false*, 1); > > } > > > > *private* > *function*dropdown_changeHandler(event:CalendarLayoutChangeEvent): > *void* > > { > > selectedDate = event.target.selectedDate; > > *if* (selectedDate) > > { > > *if* (selectedDate.hours != 0) > > { > > selectedDate.time += (24 - selectedDate.hours > )*60*60*1000; > > } > > } > > > > dropdownRef.selectedDate = selectedDate; > > } > > > > } > > } > > > ________________________________________________________________________________________________- > > MyDateChooser > > > _________________________________________________________________________________________________ > > > > *package* > > { > > *import* mx.controls.DateChooser; > > *import* mx.core.mx_internal; > > *import* mx.events.CalendarLayoutChangeEvent; > > > > *use* *namespace* mx_internal; > > > > *public* *class* MyDateChooser *extends* DateChooser > > { > > *public* *function* MyDateChooser() > > { > > *super*(); > > } > > > > *override* *protected* *function* createChildren():*void* > > { > > *super*.createChildren(); > > dateGrid.addEventListener(CalendarLayoutChangeEvent.CHANGE, > dateGrid_changeHandler, *false*, 1); > > } > > > > *private* > *function*dateGrid_changeHandler(event:CalendarLayoutChangeEvent): > *void* > > { > > > > selectedDate = event.target.selectedDate; > > *if* (selectedDate) > > { > > *if* (selectedDate.hours != 0) > > { > > selectedDate.time += (24 - selectedDate.hours > )*60*60*1000; > > } > > } > > } > > > > } > > } > > > > []s, > > > > Henrique F. Marino > > > > *De:* flexdev@googlegroups.com [mailto:[EMAIL PROTECTED] *Em nome > de *Tião da Obra > *Enviada em:* segunda-feira, 26 de novembro de 2007 14:28 > > *Para:* flexdev@googlegroups.com > *Assunto:* [flexdev] Re: Bug no DateField? > > > > Mais moço deixe de bobagem, bora tocar o barco e seguir o processo. Se a > resposta foi mal educada, peço desculpas, é que o pessoal daqui do "Goiás" é > meio besta assim mesmo, é difícil saber quando estão bricando ou falando > sério. > > > > Sobre a crítica, não era bem crítica não pelo o contrário. Deixa eu > explicar a situação, eu nunca gostei de quem "Evangelizava" linguagens: "O > Java é o melhor do mundo!", "O Delphi é o mais produtivo", "O .NET é bem > mais rápido e mais maduro". Bom, o fato é que no final das contas fui eu > quem pagou língua. Foi de um trabalho monstruoso analisar sistemas Gigantes > e convencer o pessoal a passar para o Flex, quando descobriram que nós > teríamos que duplicar as classes de negócio (POJO) do JAVA dentro do Flex > pra fazer RemoteObject e outras integrações, aí que queriam arrancar nossos > pescoços. Na história toda quem andou "Evangelizando" fomos nós da equipe > Flex, inclusive acabamos de assistir à uma palestra sobre o Thermo, uauu... > se funcionar da forma que eles mostraram, nem consigo imaginar. > > > > http://www.youtube.com/watch?v=lGdr3dCmxe4 > > http://www.youtube.com/watch?v=d9IjZJ0D_bo&feature=related > > http://www.youtube.com/watch?v=lsfOe_MCEbg&feature=related > > > > É isso, grande abraço que façamos dessa lista um lugar de gente "madura" e > disposta a resolver problemas reais. > > -Daniel > > > > > > ----- Original Message ----- > > *From:* Henrique <[EMAIL PROTECTED]> > > *To:* flexdev@googlegroups.com > > *Sent:* Monday, November 26, 2007 12:39 PM > > *Subject:* [flexdev] RES: [flexdev] Re: RES: [flexdev] Re: Bug no > DateField? > > > > Caro Tião da Obra, > > > > Parabéns pela sua conquista de gerenciar um sistema que custa 1 milhão. > Realmente vc deve ficar muito preocupado com os possíveis erros do seu > sistema que causa um prejuízo de 5 mil a cada 10 min. > > > > Quanto as críticas da que fiz a vc, sempre que eu achar pertinente > continuarei a criticar. Não irei te bloquear (obrigado pela sugestão, sei > que seria bem mais fácil pra vc!). Não concordo com a sua ironia e > principalmente pelo fato que ao invés de tentar propor uma solução para o > POSSÍVEL bug vc prefere criticar! Não seria melhor tentar achar uma solução > para o problema e assim evitar de tomar aquele preju do seu projeto de 1 > milhão? > > > > Boa Sorte! > > > > *De:* flexdev@googlegroups.com [mailto:[EMAIL PROTECTED] *Em nome > de *Tião da Obra > *Enviada em:* segunda-feira, 26 de novembro de 2007 11:51 > *Para:* flexdev@googlegroups.com > *Assunto:* [flexdev] Re: RES: [flexdev] Re: Bug no DateField? > > > > Você gerencia um sistema que custa 1 milhão nas suas mãos? Um sistema que > se ficar parado o prejuízo mínimo é de 5mil a cada 10 minutos? > > > > Guarde suas críticas pra você, se ficou ofendido, existe um recurso bom no > Outlook ou em qualquer outro gerenciador de e-mail chamado Bloquear. > > > > Passar bem! > > ----- Original Message ----- > > *From:* Henrique <[EMAIL PROTECTED]> > > *To:* flexdev@googlegroups.com > > *Sent:* Monday, November 26, 2007 10:34 AM > > *Subject:* [flexdev] RES: [flexdev] Re: Bug no DateField? > > > > Tião da Obra - Ao invés de vc ficar imaginando todas as possíveis > perguntas que iram te fazer caso aconteça tal erro, pq vc não se preocupa em > resolver? Talvez vc ache uma solução mais inteligente! > > > > > > Cassia Nino - Creio que esse problema possa ser resolvido estendendo o > componente DataField e fazendo uma correção de data no momento da criação da > data. Esse problema vai ocorrer sempre na mudança de horário normal para > horário de verão. > > > > []s, > > > > Henrique Marino > > *De:* flexdev@googlegroups.com [mailto:[EMAIL PROTECTED] *Em nome > de *Tião da Obra > *Enviada em:* segunda-feira, 26 de novembro de 2007 08:54 > *Para:* flexdev@googlegroups.com > *Assunto:* [flexdev] Re: Bug no DateField? > > > > Oba, já vou ligar pro suporte e pedir para eles desabilitarem o horário de > verão, outra pergunta, o mesmo acontece com o Windows 98? > > > > Parabéns a todos, > > -Daniel > > ----- Original Message ----- > > *From:* Cassia Nino <[EMAIL PROTECTED]> > > *To:* flexdev@googlegroups.com > > *Sent:* Sunday, November 25, 2007 10:56 PM > > *Subject:* [flexdev] Re: Bug no DateField? > > > > Puxa vida... o problema é exatamente esse, Fabio... =P > > > Obrigada!! > > > > Tchauzinho! > Cassia > > Em 25/11/07, *Fabio Terracini* < [EMAIL PROTECTED]> escreveu: > > > Cassia, isso é de certa forma procedente e reproduzível, mas até onde > conheço, apenas em algumas situações, e não tem sua origem no SDK do > Flex. > > Isso pode ocorrer se o computador estiver rodando sob determinadas > versões do Windows com a opção "ajustar automaticamente para horário > de verão". Assim, dia 05/11/2006 0:00 será automaticamente convertido > para 04/11/2006 23:00, e por isso a data é apresentada errada. Esse > comportamento, aliás, pode ocorrer em diversos softwares.. > > No Windows é configurado que o horário de verão começa em determinado > dia, mas no Brasil isso sempre é móvel, então o Windows não consegue > acertar o dia. Para estas situações a MS normalmente libera > atualizações e fornece technotes para o assunto: > http://support.microsoft.com/kb/914387/ > > Se você desabilitar o recurso de ajuste automática (duplo clique no > relógio do Windows, aba "fuso horário" e recarregar o SWF que contém o > componente DateField, você selecionará corretamente as datas que > outrora apresentavam problemas. > > []s > Fabio Terracini > > > On 11/24/07, Cassia Nino <[EMAIL PROTECTED]> wrote: > > > > Oi, pessoal! > > > > Usando o componente DateField percebi que alguns dias escolhidos no > > DateChooser simplesmente não aparecem corretamente no campo ao lado. > > > > Por exemplo, tentem selecionar os seguintes dias: > > 06/11/2005 (dom) > > 05/11/2006 (dom) > > 04/11/2007 (dom) > > 02/11/2008 (dom) > > 01/11/2009 (sáb) > > 07/11/2010 (dom) > > 06/11/2011 (dom) > > > > Qualquer um deles, se selecionado, não é exibido no campo. > > O que aparece, na verdade, é um dia anterior... > > > > Mais alguém também encontra isso? > > > > > > > > Tchauzinho! > > Cassia > > > > > > > > > > > > -- > …the Linux philosophy is 'laugh in the face of danger'. Oops. Wrong one. > 'Do it yourself'. That's it. > - Linus Torvalds<BR > > <BR > > <BR > > > --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com Para sair da lista, envie um email em branco para [EMAIL PROTECTED] Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---