luksfarris / MC851-Quack

Projeto final da disciplina de Projeto de Sistema de Informação da Unicamp
GNU General Public License v3.0
0 stars 0 forks source link

Formatação e conversão de datahoras #34

Closed JorgeStolfi closed 9 years ago

JorgeStolfi commented 9 years ago

A formatação e conversão de datahoras (timestamps) tem que levar em conta o fuso horário.

No formato interno, não há fuso horário: os parâmetros e campos {time} são número inteiro de segundos desde a "época" do Linux (1970-01-01 00:00:00 UTC), com tipo {long}.

O formato externo deve ser "{yyyy}-{mm}-{dd} {HH}:{MM}:{SS} {ZZZ}", sempre com o fuso {ZZZ} explícito.

Na conversão de formato externo para interno (se for o caso, não creio que seja necessária) o fuso deve estar explicitamente indicado no string de entrada; se não estiver, dar erro. A função de conversão não deve ter um fuso default, nem interno nem passado como parâmetro.

Na conversão de formato interno para externo, a saída deve sempre ter o fuso {ZZZ} explícito. No futuro, a função de conversão deve receber como parâmetro o fuso a usar, codificado de alguma maneira. Mas, por enquanto, usar sempre o fuso "UTC" (e não o fuso local!).

JorgeStolfi commented 9 years ago

PS. É importante que o formato externo mostre os segundos (":{SS}") pois eles são necessários para identificar uma mensagem de um usuário. A conversão de formato interno para formato externo deve ser 1 para 1.

luksfarris commented 9 years ago

Agora é para estar funcionando corretamente.

JorgeStolfi commented 9 years ago

Criei uma interface {Timestamp.java} para centralizar a conversão de formato de datahoras ({long} <--> {String}) e a obtenção da datahora corrente.

Favor criar a implementação {TimestampImpl.java} dessa interface.

Favor trocar todas as referências a {Calendar} etc. (menos em {TimestampImpl}, claro) por chamadas dos módulos {Timestamp.now(),Timestamp.toString(tlong,z),Timestamp.fromString(tstring)}..

Creio que todas as chamadas de Timestamp.now() deveriam estar em {ServerImpl.java. Confere?

luksfarris commented 9 years ago

Já deve estar correto. Existem duas chamadas da função now() fora de ServerImpl():