Java web服务不会在字符串中减去时间

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

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.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
。日期时间中的A
Z
表示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及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

      该项目现已启动,建议迁移到类

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和说明