我有一个ObjectInputStream
对象,其中有一个java.sql.Timestamp
对象。我想读取发送的实际值,而不受时区的影响。 (客户端与服务器所在的时区不同)。
我该怎么做?
// ois is an objectinputstream
Object obj = ois.readObject();
即使obj.toString()
也会返回更改的“时间”。我无法获得inputstream的时区信息。
java.sql.Time
和java.sql.Date
不会受到影响。问题只有时间戳。
假设客户端从EST发送输入流,时间是下午6:00,当我在PST中收到6:00 pm
转换为3:00 pm
时。我不要我想直接阅读6:00 pm
。
答案 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都没关系,这是同一时间点。
如果您对本地客户端时间感兴趣,则可能需要根据您的要求发送其他值。