Parcelable java.util.Date

4

我正在尝试将我的一个类变为可 Parcelable 的,其中一个属性是一个日期对象。

在 writeToParcel() 方法中,我有:

out.writeLong(myDate.getTime());

在我的createFromParcel()方法中,我有以下代码:

person.setDate(new Date(in.readLong() * 1000));

我将传递给Intent的对象具有以下创建日期:

new Date(2000,12,06)

但是,当我在另一个活动中阅读它时:

myDate.getYear()+"-"+myDate.getMonth()+"-"+myDate.getDay()

它打印出"2001-0-0"

我猜想在包裹过程中有些东西出了问题?

2个回答

3
您正在写出自Unix纪元以来的毫秒数(请参见getTime()的文档)。
接受long值的Date构造函数采用自Unix纪元以来的毫秒数(请参见该构造函数的文档)。
相反,您正在将自Unix纪元以来的微秒数传递给构造函数。只需将readLong()值传递给Date构造函数,看看是否有帮助。

那么您是建议我只是删除*1000吗? - user1154644

1
你的错误在于创建Date对象的方式不正确,请查看文档以获取更多信息。
参数: 年份,0表示1900年(例如100表示2000年)。 月份,0-11(例如6表示六月)。 日期,1-31(不需要示例)。
如你所见,当你执行"new Date(2000,12,06)"时,你没有创建你最初想要创建的日期。此外,请注意该方法已被自API 1起废弃,所以请不要使用它,除非你是针对API 1编写代码,但我认为现在没有人这样做了。
另外,正如CommonsWare告诉你的那样,在阅读时删除结尾的1000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接