从ObjectStream读取java.sql.Timestamp对象,而不更改时间值吗?

时间:2019-04-24 23:19:23

标签: java

我有一个ObjectInputStream对象,其中有一个java.sql.Timestamp对象。我想读取发送的实际值,而不受时区的影响。 (客户端与服务器所在的时区不同)。

我该怎么做?

// ois is an objectinputstream 
Object obj = ois.readObject();

即使obj.toString()也会返回更改的“时间”。我无法获得inputstream的时区信息。

java.sql.Timejava.sql.Date不会受到影响。问题只有时间戳。

假设客户端从EST发送输入流,时间是下午6:00,当我在PST中收到6:00 pm转换为3:00 pm时。我不要我想直接阅读6:00 pm

1 个答案:

答案 0 :(得分:0)

您无法获得“原始”时区,因为它从未成为java.sql.Timestamp对象的一部分。如Serialized Form from java.sql.Timestamp中所述,当java.sql.Timestamp对象被序列化时,只有该对象的内部nanos字段被序列化(不计算基类java.util.Date的信息):

  

java.sql.Timestamp扩展了Date实现了可序列化

     

serialVersionUID :2745179027874758501L

     

序列化字段

     

nanos

     

int nanos

再次对该对象反序列化时,将得到一个java.sql.Timestamp对象,其内部nanos字段设置为与以前一样的精确值。在这两种情况下,两个对象都通过unix时间戳引用相同的时间点。太平洋标准时间下午6:00或太平洋标准时间下午3:00都没关系,这是同一时间点。

如果您对本地客户端时间感兴趣,则可能需要根据您的要求发送其他值。