Datas no formato JSON "\/Date(829332360000-0300)\/"

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Datas no formato JSON "\/Date(829332360000-0300)\/"

Mensagem por vagucs »

Amigos,

Estou trabalhando em uns webservice que usam JSON para transporte de dados, e perdi horas por causa do formato maluco de datas que o JSON usa, baseado em milissegundos.

Ai para contribuir, resolvi com esta pequena rotina, poderia fazer em C também, mas esta em puro harbour vale a pena pra aprendizado. Se alguém quiser melhorar vai ser bom.
O Harbour não dá suporte a tal formato, quando se gera um JSON com a HB_JSONENCODE, ela deixa as datas vazias. Isso pode ser muito útil. Ainda uso o Harbour 3.1 e não sei se na versão atual Beta colocaram este suporte.

Código: Selecionar todos

function date_json(xDate,xHora,xUtc)
xDate=(xDate-ctod("01/01/1970"))*86400000
xDate+=(((val(left(xHora,2))*60)*60)*1000)+((val(substr(xHora,4,2))*60)*1000)+(val(right(xHora,2))*1000)
xDate=alltrim(str(xDate))
if xUtc=Nil
   xUtc="-0300" // Timezone do Brasil
end if
xDate+=xUtc
xDate='\/Date('+xDate+')\/'
return xDate

function json_date(xDate)
xDate=lower(xDate)
xDate=strtran(xDate,'\/date(')
xDate=strtran(xDate,'/date(')
xDate=strtran(xDate,')/\')
xDate=strtran(xDate,')/')
if "-"$xDate // Retira o timezone
   xDate=left(xDate,at("-",xDate)-1)
end if
xDate=val(xDate)
return ctod("01/01/1970")+(xDate/86400000)
Sem mais
Wagner Nunes
www.vagucs.com.br
Responder