JAX-RPC包括;Z";在日期结束时使用Java日历作为输入

JAX-RPC包括;Z";在日期结束时使用Java日历作为输入,java,calendar,utc,jax-rpc,Java,Calendar,Utc,Jax Rpc,我们使用JAX-RPC调用后端调用。我已经使用RAD8.5和后端提供的WSDL/XSD文件生成了JAX-RPC客户端。我们的客户端应用程序为我们提供了一个格式为yyyyMMdd(20130720)的字符串日期值。后端应用程序需要将此值格式化为yyyy MM ddZ 使用JAX-RPC生成的对象,此输入需要一个日历对象。因此,我创建了一个转换为UTC的日历对象(下面的代码)并将其传入。生成的XML缺少日期末尾的“Z”。2013-07-20 所以我的问题是,使用JAX-RPC,我如何让它在我的日期结

我们使用JAX-RPC调用后端调用。我已经使用RAD8.5和后端提供的WSDL/XSD文件生成了JAX-RPC客户端。我们的客户端应用程序为我们提供了一个格式为yyyyMMdd(20130720)的字符串日期值。后端应用程序需要将此值格式化为yyyy MM ddZ

使用JAX-RPC生成的对象,此输入需要一个日历对象。因此,我创建了一个转换为UTC的日历对象(下面的代码)并将其传入。生成的XML缺少日期末尾的“Z”。2013-07-20

所以我的问题是,使用JAX-RPC,我如何让它在我的日期结束时包含“Z”以满足后端的要求?我需要对Calendar对象做些什么,或者对JAX-RPC实现做些什么

日历创建代码

    String requestedDate = "20130720"; //This is a parameter in a method.
    Calendar requestedDateCal = Calendar.getInstance();
    int year = 0;
    int month = 0;
    int day = 0;

    year = Integer.parseInt((String) requestedDate.substring(0, 4));
    month = Integer.parseInt((String) requestedDate.substring(4, 6));
    day = Integer.parseInt((String) requestedDate.substring(6, 8));

    requestedDateCal = DateTimeUtils.convertToGMTCalendar(year, month, day, 0, 0, 0, 0);
convertToGMTCalendar()的代码

convertToLocalCalendar()的代码


“后端应用程序要求将此值格式化为yyyy MM ddZ”-是否有可能修复它?这是一种非常奇怪的格式,因为日期没有时区或与UTC的偏移量。我不记得曾经见过这样的格式。我同意,我也很乐意,但不幸的是我不能。至少在我的时间范围内没有。它们在XSD中也有一个没有时区的日期格式。我打算把它提交给那个团队,看看我们是否可以更改它,但这些模式太旧了,我怀疑它们是否会改变。我遇到的问题是,如果我不发送带有“Z”的模式,它们会向我抛出一个验证错误。最初我们使用的是XMLBeans,它是为我们准备的,但我们正试图摆脱它。请查看Filip的答案,这里:
    Calendar localCalendar = convertToLocalCalendar(year, month, date, hour, minute, second, utcOffset);
    TimeZone gmtTimeZone = TimeZone.getTimeZone("UTC");
    Calendar gmtCalendar = Calendar.getInstance(gmtTimeZone);
    gmtCalendar.setTimeInMillis(localCalendar.getTimeInMillis());
    return gmtCalendar;
    TimeZone aTimeZone =
        TimeZone.getTimeZone(TimeZoneConversion.GMT.getTimeZoneString() + Integer.toString(utcOffset));

    Calendar localCalendar = Calendar.getInstance();
    localCalendar.clear();

    localCalendar.setTimeZone(aTimeZone);
    localCalendar.set(year, month - 1, date, hour, minute, second);

    return localCalendar;