Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中获取没有时区的时间_Java_Postgresql_Date - Fatal编程技术网

在Java中获取没有时区的时间

在Java中获取没有时区的时间,java,postgresql,date,Java,Postgresql,Date,我在postgreSQL中有一个函数,它有一个没有时区列的时间。然后在我的方法中,设置参数时出现错误。它说类型未知。如何使用当前系统时间设置此参数?该方法的目的是验证数据库中是否存在寄存器 功能: CREATE OR REPLACE FUNCTION public.inserir_posicao( _tag bigint, _data_hora timestamp without time zone, _lat double precision, _long d

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

功能:

 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;
方法:

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();
    }

嗯,你可以用

SimpleDateFormat sdf = new SimpleDateFormat(**pattern**);
String sData = sdf.format(GregorianCalendar.getInstance());
qry.setParameter("date",sData);
您必须指定您的模式的位置

在我的代码中,我放置了返回当前时间的
gregoriacalendar.getInstance
。您也可以通过查询上的
sysdate
来实现这一点。 在你的功能上,在

pos\u data=$2
您必须将
pos\u data=to\u date($2,**模式**)
设置为日期,因为现在,您传递一个代表日期的字符串,并通过postgres函数将其转换为日期


另请参见:和

Umh您可以使用

SimpleDateFormat sdf = new SimpleDateFormat(**pattern**);
String sData = sdf.format(GregorianCalendar.getInstance());
qry.setParameter("date",sData);
您必须指定您的模式的位置

在我的代码中,我放置了返回当前时间的
gregoriacalendar.getInstance
。您也可以通过查询上的
sysdate
来实现这一点。 在你的功能上,在

pos\u data=$2
您必须将
pos\u data=to\u date($2,**模式**)
设置为日期,因为现在,您传递一个代表日期的字符串,并通过postgres函数将其转换为日期


另请参见:和

仅在Java 8中,您可以使用以下命令来获取UTC的本地时间偏移,并且不带区域:

String ldt = Instant.now().atOffset(ZoneOffset.UTC).toLocalDateTime().toString();
qry.setParameter("data",ldt);

如果您有自己的日期,您可以使用相同的代码,只需将
Instant.now()
替换为
Instant.parse(date)
,尽管它必须正确格式化。

您可以使用以下代码(仅在Java 8中)获取UTC的本地时间偏移,并且不带区域:

String ldt = Instant.now().atOffset(ZoneOffset.UTC).toLocalDateTime().toString();
qry.setParameter("data",ldt);

如果您有自己的日期,您可以使用相同的代码,只需将
Instant.now()
替换为
Instant.parse(date)
,尽管它必须正确格式化。

“我在postgreSQL中有一个函数”——向我们展示该函数。它是什么类型的?请访问并阅读以了解如何有效地使用StackOverflow。“我在postgreSQL中有一个函数”——向我们展示该函数。它是什么类型的?请访问并阅读以了解如何有效地使用StackOverflow。我使用了您写的前三行。它应该正确吗?因为我得到一个错误:无法将给定对象格式化为日期您必须指定一个模式,例如“yyyy/MM/dd”。模式必须是字符串。看看我回复中的链接,如果我使用qry.setParameter(“data”,新的时间戳(System.currentTimeMillis()),为什么不正确;您是否也更改了postgresql上的函数?我使用了您编写的前三行。它应该正确吗?因为我得到一个错误:无法将给定对象格式化为日期您必须指定一个模式,例如“yyyy/MM/dd”。模式必须是字符串。看看我回复中的链接,如果我使用qry.setParameter(“data”,新的时间戳(System.currentTimeMillis()),为什么不正确;您是否也更改了postgresql上的函数?