Java web服务不会在字符串中减去时间
web服务接收到两个字符串Hora_in和Hora_out,我试图将这些字符串转换为日期,减去两个字符串的转换,然后将结果转换为字符串,但出现了错误 WS00041:服务调用引发异常,消息为:null;有关详细信息,请参阅服务器日志Java web服务不会在字符串中减去时间,java,web-services,date,long-integer,Java,Web Services,Date,Long Integer,web服务接收到两个字符串Hora_in和Hora_out,我试图将这些字符串转换为日期,减去两个字符串的转换,然后将结果转换为字符串,但出现了错误 WS00041:服务调用引发异常,消息为:null;有关详细信息,请参阅服务器日志 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.u
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;
@WebService(serviceName = "Parking")
@Stateless()
public class Parking {
/**
* This is a sample web service operation
* @param Hora_in
* @param Hora_out
* @return
* @throws java.text.ParseException
*/
@WebMethod(operationName = "Reserva")
public String Reserva(@WebParam(name = "Hora_in") String Hora_in, @WebParam(name = "Hora_out") String Hora_out) throws ParseException {
String parqueo;
Locale locale = new Locale("es","CO");
String hourf = "HH:mm:ss 'Z'";
SimpleDateFormat format = new SimpleDateFormat(hourf, locale);
format.setTimeZone(TimeZone.getTimeZone("GMT"));
Date Hin = format.parse(Hora_in);
Date Hout = format.parse(Hora_out);
long diff = Hin.getTime() - Hout.getTime();
Date difh = new Date(diff);
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss 'Z'");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
parqueo=dateFormat.format(difh);
return parqueo;
}
}
在WS00041下方,将显示以下消息:
Exceptions details : java.lang.reflect.InvocationTargetException
javax.servlet.ServletException: java.lang.reflect.InvocationTargetException
at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:342)
at org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:106)
at org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:143)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.glassfish.grizzly.servlet.ServletHandler.doServletService(ServletHandler.java:226)
at org.glassfish.grizzly.servlet.ServletHandler.service(ServletHandler.java:178)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:313)
... 24 more
Caused by: jaxws.ParseException_Exception: Unparseable date: "10:00"
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:147)
at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253)
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:203)
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:290)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)
at com.sun.proxy.$Proxy444.reserva(Unknown Source)
... 29 more
我应该改变什么来做减法?思考?
您的错误可能与解析一天中某个时间的字符串无关,因为异常与.reflect
包中的类相关
java.time
一天中有一段时间你用错了课。java.util.Date
类用于具有时间值的日期。你没有约会
此外,您使用的是多年前被java.time类取代的旧遗留日期时间类
对于一天中的时间值,请使用LocalTime
LocalTime start = LocalTime.parse( "12:34" ) ;
LocalTime stop = LocalTime.parse( "15:00" ) ;
只有一天中的时间的时区?
我没有ide,为什么一天中某个时间的字符串输入最后会出现Z
。日期时间中的AZ
表示UTC。UTC在一天中的某个时间值的上下文中没有任何意义。因此,我将忽略你问题的'Z'
部分
持续时间
使用持续时间
计算经过的时间
Duration d = Duration.between( start , stop ) ;
场所
在以标准格式解析时间字符串时,无需指定区域设置
只有在本地化/翻译需要人类语言和文化规范的地方,才需要语言环境
日期和区域
我怀疑你应该在使用日期的同时使用一天中的时间,以及时区。但是这个问题并不能解释商业问题,所以我只是猜测你的名字
请注意,一天中的时间计算仅限于一个通用的24小时一天。你不能超过午夜进入第二天。因此,您的停止时间必须始终晚于(大于)开始时间(除非您想要一个负数结果,时间倒转)
学习调试
学习调试对于成为一名程序员至关重要
当遇到这样的问题时,将您怀疑的原因(解析一天中的时间)分离到一个简单的一次性应用程序中。在复杂应用程序(web应用程序、servlet、web容器等)的更大范围内尝试之前,先让基本功能正常工作。如果您的代码在一次性应用程序中工作,但不是真正的(复杂的)应用程序,那么您知道问题的实际原因几乎肯定在其他地方
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(反射?
您的错误可能与解析一天中某个时间的字符串无关,因为异常与
.reflect
包中的类相关
java.time
您在一天中的某个时间使用了错误的类。java.util.Date
类用于具有时间值的日期。您没有日期
此外,您使用的是多年前被java.time类取代的旧遗留日期时间类
对于一天中的时间值,请使用LocalTime
LocalTime start = LocalTime.parse( "12:34" ) ;
LocalTime stop = LocalTime.parse( "15:00" ) ;
只有一天中的时间的时区?
我不知道为什么一天中某个时间的字符串输入会在末尾出现一个Z
。日期时间中的Z
表示UTC。UTC在一天中某个时间值的上下文中没有任何意义。因此,我将忽略您问题的'Z'
部分
持续时间
使用持续时间
计算经过的时间
Duration d = Duration.between( start , stop ) ;
场所
在以标准格式解析时间字符串时,无需指定区域设置
只有在本地化/翻译需要人类语言和文化规范的地方,才需要语言环境
日期和区域
我怀疑你应该在使用日期的同时使用一天中的时间,以及时区。但是这个问题并不能解释商业问题,所以我只是根据你的名字猜测
请注意,一天中的时间计算仅限于一个普通的24小时工作日。您不能超过午夜进入第二天。因此,您的停止时间必须始终晚于(大于)开始时间(除非您想要一个负数结果,时间向后)
学习调试
学习调试对于成为一名程序员至关重要
当遇到这样的问题时,将您怀疑的原因(每天的解析时间)分离到一个简单的一次性应用程序中。在您复杂的应用程序(web应用程序、servlet、web容器等)的更大范围内尝试之前,先让您的基本功能正常工作。如果您的代码在一次性应用程序中工作,但不是真正的应用程序(复杂的)应用程序,那么你知道问题的实际原因几乎肯定在别处
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和说明