Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 从web服务响应中删除时区_Java_.net_Web Services_Date - Fatal编程技术网

Java 从web服务响应中删除时区

Java 从web服务响应中删除时区,java,.net,web-services,date,Java,.net,Web Services,Date,是否有任何方法可以从web服务返回的Java日期对象中删除时区组件 例如,我的开始日期是上午12点。我想把它用作客户当地时间上午12点 我认为如果soap消息没有时区组件,那么就使用本地时区。我考虑过另外两个选项,要么在客户端对日期进行算术运算(我真的不想这么做),要么创建一个新的日期类,将日期、月份和年份作为整数保存(我不需要时间信息)。后一种选择需要大量重构,因此,如果有一种方法可以在soap消息中删除时区信息,那就更好了 客户端是用.NET编写的,因此,如果有一种方法可以更改客户端对日期的

是否有任何方法可以从web服务返回的Java日期对象中删除时区组件

例如,我的开始日期是上午12点。我想把它用作客户当地时间上午12点

我认为如果soap消息没有时区组件,那么就使用本地时区。我考虑过另外两个选项,要么在客户端对日期进行算术运算(我真的不想这么做),要么创建一个新的日期类,将日期、月份和年份作为整数保存(我不需要时间信息)。后一种选择需要大量重构,因此,如果有一种方法可以在soap消息中删除时区信息,那就更好了


客户端是用.NET编写的,因此,如果有一种方法可以更改客户端对日期的解释方式,我认为这将实现相同的目标。

Java
date
对象没有时区组件。他们根本没有时区的概念:从UTC 1970年1月1日午夜开始,他们总是只有毫秒

我对日期和时间的SOAP表示不太了解。。。如果你能说服它,你所需要的只是一个约会(而不是一个日期和时间),你很可能就没事了。否则,我建议你在UTC做所有事情,但认为这是客户的本地时间。如果你只是处理日期,这不应该太坏-虽然你需要考虑午夜并不总是发生在每个时区的每一个日期,或者它可能发生两次…< /P>
基本上,遗憾的是.NET和Java都没有一个像样的内置日期和时间API。在Java上,您可以使用
LocalDate
来准确地表示您感兴趣的内容(本地时区中的日期)。在.NET上(最终)会有,但还没有准备好。即使这两个对象都存在于各自的基础平台中,您仍然需要说服SOAP对它们进行适当的序列化:(

Java
Date
对象没有时区组件。它们根本没有时区的概念:自1970年1月1日UTC午夜以来,它们始终只有毫秒

我对日期和时间的SOAP表示不太了解……如果你能说服它,日期就是你所需要的(而不是日期和时间)你可能会很好。否则,我建议你在UTC做所有事情,但是把它看作是客户的本地时间。如果你只处理日期,这不应该太坏-虽然你需要考虑午夜并不总是发生在每个时区的每个日期,或者它可能发生两次…


基本上,遗憾的是,无论是.NET还是Java都没有一个像样的内置日期和时间API。在Java上,您可能希望使用
LocalDate
,来准确地表示您感兴趣的内容(本地时区中的日期)。在.NET上,会(最终)但是这还没有准备好。即使这两种类型都存在于各自的基础平台中,您仍然需要说服SOAP对它们进行适当的序列化:(

我相信我已经找到了解决问题的方法。我使用@XmlJavaTypeAdapter更改了将日期类封送到Xml的方式

这是我使用的DateAdapter

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {
 // the desired format
 private String pattern = "yyyy-MM-dd";

 public String marshal(Date date) throws Exception {
 return new SimpleDateFormat(pattern).format(date);
 }

 public Date unmarshal(String dateString) throws Exception {
 return new SimpleDateFormat(pattern).parse(dateString);
 }
}

我相信我已经找到了解决问题的方法。我使用@XmlJavaTypeAdapter改变了date类封送为Xml的方式

这是我使用的DateAdapter

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {
 // the desired format
 private String pattern = "yyyy-MM-dd";

 public String marshal(Date date) throws Exception {
 return new SimpleDateFormat(pattern).format(date);
 }

 public Date unmarshal(String dateString) throws Exception {
 return new SimpleDateFormat(pattern).parse(dateString);
 }
}