在Java中获得时间没有时区 [英] get time without time zone in Java

查看:191
本文介绍了在Java中获得时间没有时区的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在postgreSQL中有一个没有时区列的功能。然后在我的方法中,设置参数时会出错。它说类型是未知的。如何使用当前系统时间设置此参数?该方法的目的是验证DB中是否存在该寄存器。



功能:

  CREATE OR REPLACE FUNCTION public.inserir_posicao(
_tag bigint,
_data_hora timestamp without time zone,
_lat double precision,
_long double precision,
_gado_id bigint)
返回整数AS
$ BODY $ declare
tagPesq BigInt;
begin

从标签= $ 1的coordenadas中选择标签到tagPesq;
如果tagPesq不为null并且tagPesq> 0然后
更新coordenadas set pos_data = $ 2,
pos_latitude = $ 3,
pos_longitude = $ 4,
gado_id = $ 5
其中tag_id = $ 1;
else
插入coordenadas(pos_data,pos_latitude,pos_longitude,
tag_id,gado_id)值($ 2,$ 3,$ 4,$ 1,$ 5);
end if;

return 1;

EXCEPTION WHEN RAISE_EXCEPTION THEN
BEGIN
return 0;
END;
end; $ BODY $
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.inserir_posicao(bigint,时区与时区,双精度,双精度,bigint)
OWNER TO postgres;

方法:

 code> public int insertPosicao(BigInteger tagId,BigInteger gadoId,double lat,double lon){

查询qry = manager.createNativeQuery(select insertedir_posicao(:tag,:data,:lat, :lng,:gado));
qry.setParameter(tag,tagId);
qry.setParameter(data,???); //这个参数。
qry.setParameter(lat,lat);
qry.setParameter(lng,lon);
qry.setParameter(gado,gadoId);
return(int)qry.getSingleResult();
}


解决方案

嗯,你可以使用像

  SimpleDateFormat sdf = new SimpleDateFormat(** pattern **); 
String sData = sdf.format(GregorianCalendar.getInstance());
qry.setParameter(date,sData);

您必须指定模式



在我的代码中,我把 GregorianCalendar.getInstance 返回当前时间。您也可以使用 sysdate 来查询。
在你的函数上,在



pos_data = $ 2 你必须设置 pos_data = to_date($ 2,** pattern **)因为现在,你传递一个String代表日期,并通过postgres函数转换为日期



另请参见: SimpleDateFormat 和< ahref =https://www.postgresql.org/docs/8.1/static/functions-formatting.html =nofollow> to_date PostgreSQL


I have a function in postgreSQL that has a time without time zone column. Then in my method, I get an error when setting the parameter. It says the type is unknown. How can I set this parameter with the current system time? The purpose of the method is to verify if the register exists or not in DB.

Function:

 CREATE OR REPLACE FUNCTION public.inserir_posicao(
    _tag bigint,
    _data_hora timestamp without time zone,
    _lat double precision,
    _long double precision,
    _gado_id bigint)
  RETURNS integer AS
$BODY$declare
  tagPesq BigInt;
begin

  select tag into tagPesq from coordenadas where tag = $1;
  if tagPesq is not null and tagPesq > 0 then
     update coordenadas set pos_data = $2, 
    pos_latitude = $3,
    pos_longitude = $4,
    gado_id = $5
    where tag_id = $1;
  else
     insert into coordenadas(pos_data,pos_latitude,pos_longitude,
    tag_id, gado_id) values ($2,$3,$4,$1,$5);
  end if;

  return 1;

  EXCEPTION WHEN RAISE_EXCEPTION THEN
  BEGIN
    return 0;
  END;
end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.inserir_posicao(bigint, time with time zone, double precision, double precision, bigint)
  OWNER TO postgres;

Method:

public int insertPosicao(BigInteger tagId, BigInteger gadoId, double lat, double lon) {

        Query qry = manager.createNativeQuery("select inserir_posicao(:tag,:data,:lat,:lng,:gado)");
        qry.setParameter("tag", tagId);
        qry.setParameter("data", ??? ); //this parameter.
        qry.setParameter("lat", lat);
        qry.setParameter("lng", lon);
        qry.setParameter("gado", gadoId);
        return (int) qry.getSingleResult();
    }

解决方案

Umh you could use something like

SimpleDateFormat sdf = new SimpleDateFormat(**pattern**);
String sData = sdf.format(GregorianCalendar.getInstance());
qry.setParameter("date",sData);

where you have to specify you pattern

In my code I put GregorianCalendar.getInstance that return current time. You can also achieve this with just a sysdate on query. On your function, on

pos_data = $2 you have to set pos_data=to_date($2,**pattern**) because now, you pass a String stands for date and via postgres function you transfor it into date

See also: SimpleDateFormat and to_date PostgreSQL

这篇关于在Java中获得时间没有时区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆