Re: Res: [zope-pt] [ off-topic ] Zope Freak Show - manipulando datas
Caso alguém esteja com problemas com o horário de verão, pode pegar esse script na internet, que funciona. Já testei em Linux e FreeBSD: http://web.onda.com.br/humberto/arquivo/HorarioDeVerao.sh Como o próprio dono do script disse, é um POG (*) , mas funciona :-) (*) POG = http://desciclo.pedia.ws/wiki/POG -- Jeronimo Zucco LPIC-1 Linux Professional Institute Certified Núcleo de Processamento de Dados Universidade de Caxias do Sul http://jczucco.blogspot.com Citando Dorneles Treméa <[EMAIL PROTECTED]>: > Opa Braga, > > > Eu tenho ZSQL que traz a data do banco e não há qualquer manipulação e etc. > > Hum... e qual o timezone dessa data que o banco está retornado? > > Eu aposto que o furo está aqui... > > > no zsql eu tenho o "select" ... tenho um script python que carrega esse > > SZQL e repassa ao ZPT (com a opção dictionaries) e no ZPT é extamente > > este trecho > > > > tal:attributes="value > python:DateTime(*MinhaData.parts()[:3]).strftime('%d/%m/%Y')" > > > > se eu tentar algo como: > > > > tal:attributes="value python:DateTime(MinhaData).strftime('%d/%m/%Y')" > > Opa, opa, porque cargas d'água você está criando um novo DateTime se > o MinhaData retornado já é um DateTime? :-) > > Isso altera o timezone da data para o timezone usado no Zope, veja > uma explicação mais detalhada abaixo. > > > Um dia é subtraído da data > > Será? Eu diria que isso é tecnicamente *impossível*... ;-) > > O que está acontecendo é que a representação do mesmo DateTime > em timezones diferentes é, como esperado, diferente. Porém a data > continua sendo a mesma, afinal quando já é zero hora de amanhã em > Londres, ainda são 21:00 aqui, na pacata Garibaldi, assim como > são 2:00 da matina na igualmente pacata Tønsberg, na Noruega. > > Deixa eu tentar provar isso... > > Se a data que estiver retornando do banco estiver num timezone > diferente do que é usado no Zope o que ocorre é o seguinte: > > >>> # Criando uma data no formato ISO 8601[1] (timezone: GMT+0) > >>> UTC = DateTime('2006-10-18') > >>> UTC.parts() > (2006, 10, 18, 0, 0, 0.0, 'GMT+0') > > Agora, se você passar esse DateTime como parâmetro para a criação > de outro DateTime (que é o que você está fazendo no PageTemplate > por uma razão que eu desconheço), o timezone dele muda para o do > Zope (que herda o que estiver definido pelo sistema operacional): > > >>> DateTime(UTC).parts() > (2006, 10, 17, 21, 0, 0.0, 'GMT-3') > > Note que mesmo a representação sendo diferente, eles continuam > sendo a mesma coisa: > > >>> UTC == DateTime(UTC) > True > >>> UTC.timezone() == DateTime(UTC).timezone() > False > > Ou seja, continua sendo a mesma 'data' só que em timezones > diferente. Esse é o problema comum quanso se usa datas sem um > timezone associado. > > A solução para o seu problema é fazer com que a instância do > DateTime criada pelo banco esteja no mesmo timezone do que está > sendo usado no Zope. A forma mais simples é fazendo o banco > retornar uma string ISO 8601 ou, de forma mais simplificada, > "-MM-DD GMT±X" ou ainda algo mais simples, "/MM/DD", > detalhe para as barras no lugar dos traços. > > Espero ter ajudado a entender a questão e, conseqüentemente, > a resolver o problema. > > [1] http://www.w3.org/TR/NOTE-datetime > > HTH, > > -- > > Dorneles Treméa > X3ng Web Technology > This message was sent using IMP, the Internet Messaging Program. Para enviar uma mensagem: zope-pt@yahoogrupos.com.br Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/zope-pt/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: Res: [zope-pt] [ off-topic ] Zope Freak Show - manipulando datas
Opa Braga, > Eu tenho ZSQL que traz a data do banco e não há qualquer manipulação e etc. Hum... e qual o timezone dessa data que o banco está retornado? Eu aposto que o furo está aqui... > no zsql eu tenho o "select" ... tenho um script python que carrega esse > SZQL e repassa ao ZPT (com a opção dictionaries) e no ZPT é extamente > este trecho > > tal:attributes="value > python:DateTime(*MinhaData.parts()[:3]).strftime('%d/%m/%Y')" > > se eu tentar algo como: > > tal:attributes="value python:DateTime(MinhaData).strftime('%d/%m/%Y')" Opa, opa, porque cargas d'água você está criando um novo DateTime se o MinhaData retornado já é um DateTime? :-) Isso altera o timezone da data para o timezone usado no Zope, veja uma explicação mais detalhada abaixo. > Um dia é subtraído da data Será? Eu diria que isso é tecnicamente *impossível*... ;-) O que está acontecendo é que a representação do mesmo DateTime em timezones diferentes é, como esperado, diferente. Porém a data continua sendo a mesma, afinal quando já é zero hora de amanhã em Londres, ainda são 21:00 aqui, na pacata Garibaldi, assim como são 2:00 da matina na igualmente pacata Tønsberg, na Noruega. Deixa eu tentar provar isso... Se a data que estiver retornando do banco estiver num timezone diferente do que é usado no Zope o que ocorre é o seguinte: >>> # Criando uma data no formato ISO 8601[1] (timezone: GMT+0) >>> UTC = DateTime('2006-10-18') >>> UTC.parts() (2006, 10, 18, 0, 0, 0.0, 'GMT+0') Agora, se você passar esse DateTime como parâmetro para a criação de outro DateTime (que é o que você está fazendo no PageTemplate por uma razão que eu desconheço), o timezone dele muda para o do Zope (que herda o que estiver definido pelo sistema operacional): >>> DateTime(UTC).parts() (2006, 10, 17, 21, 0, 0.0, 'GMT-3') Note que mesmo a representação sendo diferente, eles continuam sendo a mesma coisa: >>> UTC == DateTime(UTC) True >>> UTC.timezone() == DateTime(UTC).timezone() False Ou seja, continua sendo a mesma 'data' só que em timezones diferente. Esse é o problema comum quanso se usa datas sem um timezone associado. A solução para o seu problema é fazer com que a instância do DateTime criada pelo banco esteja no mesmo timezone do que está sendo usado no Zope. A forma mais simples é fazendo o banco retornar uma string ISO 8601 ou, de forma mais simplificada, "-MM-DD GMT±X" ou ainda algo mais simples, "/MM/DD", detalhe para as barras no lugar dos traços. Espero ter ajudado a entender a questão e, conseqüentemente, a resolver o problema. [1] http://www.w3.org/TR/NOTE-datetime HTH, -- Dorneles Treméa X3ng Web Technology Para enviar uma mensagem: zope-pt@yahoogrupos.com.br Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/zope-pt/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Res: [zope-pt] [ off-topic ] Zope Freak Show - manipulando datas
Grande Deo!Eu tenho ZSQL que traz a data do banco e não há qualquer manipulação e etc.no zsql eu tenho o "select" ... tenho um script python que carrega esse SZQL e repassa ao ZPT (com a opção dictionaries) e no ZPT é extamente este trechotal:attributes="value python:DateTime(*MinhaData.parts()[:3]).strftime('%d/%m/%Y')"se eu tentar algo como:tal:attributes="value python:DateTime(MinhaData).strftime('%d/%m/%Y')"Um dia é subtraído da data- Mensagem original De: Dorneles Treméa <[EMAIL PROTECTED]>Para: zope-pt@yahoogrupos.com.brEnviadas: Terça-feira, 17 de Outubro de 2006 23:04:29Assunto: Re: [zope-pt] [ off-topic ] Zope Freak Show - manipulando datas Opa Braga, > Passei por uma situação curiosa envolvendo datas e estou relatando por > dois motivos, pode auxiliar outras pessoas no futuro e pode também > surgir uma solução mais interessante. > > Ocorre o seguinte, eu gravo uma data no banco e depois ela é colocada em > um textbox em uma janela de edição de dados e etc. > > Ao carregar essa data (em um ZPT) o Zope simplemente subtrai um dia, sem > perguntar religião, time que torce e etc., ele subtrai e pronto. isso está seriamente cheirando a algo relacionado com a mudança de timezone, ou seja, para nós o famigerado horário de verão... > a solução sugerida foi a seguinte: > > tal:attributes="value python:DateTime(*MinhaData.parts()[:3]).strftime('%d/%m/%Y')" > > onde eu "recrio a data" e posteriormente formato, ao tentar formatar > diretamente a data é subtraída em um dia. > > Caso alguém queira acrescentar algo naturalmente será deveras > interessante :D Seria interessante você tentar produzir um trecho mínimo de código onde o problema possa ser reproduzido para darmos uma olhada. []'s -- Dorneles Treméa X3ng Web Technology O Yahoo! está de cara nova. Venha conferir! __._,_.___ Para enviar uma mensagem: zope-pt@yahoogrupos.com.br Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE Links do Yahoo! Grupos Para visitar o site do seu grupo na web, acesse:http://br.groups.yahoo.com/group/zope-pt/ Para sair deste grupo, envie um e-mail para:[EMAIL PROTECTED] O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!. __,_._,___