我在找一个合适的可序列化的仅日期类。在中央时区有一个服务器,我希望东部的用户输入日期为2010-11-23,太平洋的用户将其视为2010-11-23(反之亦然)。
java.util.Date
是一个时间敏感的瞬间,所以对我不起作用。由于不想重新发明轮子,我决定给乔达一次机会。根据概述,
LocalDate
是“表示没有时间(没有时区)的本地日期的类”-正是我需要的。
不幸的是,它似乎并不独立于时区。数据库里有2010-11-23。在服务器上,我将其转换为
本地日期
具有
new LocalDate(java.sql.Date)
.
date.toString()
打印2010-11-23。
在客户端反序列化之后,
date.ToString()
打印2010-11-22和
date.getDayOfMonth()
22岁。但是
date.toDateTimeAtStartOfDay()
生产日期:2010-11-23T00:00:00.000-08:00。
我做错什么了吗?Joda中是否有一个只对日期不敏感的时区类?
编辑
:在数据库中,我正在使用不区分时区的列(
DATE
在博士后)服务器与数据库位于同一时区,因此它读取的日期正好这不是问题。
我正在寻找一个Java类型,它一旦在一个时区中实例化,在所有时区中都具有相同的civil(部分)日期值。
编辑2
:在服务器上,所有内容都已正确加载并具有UTC时区。经过调查我认为这是个漏洞
ISOChronology
. 客户方将其开箱为美国/洛杉矶。原因是序列化是通过以下方式完成的:
class ISOChronology {
// ...
private Object writeReplace() {
return new Stub(getZone());
}
private static final class Stub implements Serializable {
private static final long serialVersionUID = -6212696554273812441L;
private transient DateTimeZone iZone;
Stub(DateTimeZone zone) {
iZone = zone;
}
private Object readResolve() {
return ISOChronology.getInstance(iZone);
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(iZone);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
iZone = (DateTimeZone)in.readObject();
}
}
}
祝你好运,用一个瞬变场连载。