如何将FieldValue.serverTimestamp()强制转换为Kotlin/Java日期类

如何将FieldValue.serverTimestamp()强制转换为Kotlin/Java日期类,java,android,firebase,kotlin,google-cloud-firestore,Java,Android,Firebase,Kotlin,Google Cloud Firestore,我想保存在Firestore中创建帖子的日期,但不想使用系统时间。相反,为了准确起见,我想使用服务器时间戳。因此,我使用FieldValue.serverTimestamp()获取服务器时间戳,但保存该时间戳的变量的数据类型是Date。那么如何将FieldValue.serverTimestamp()转换为Date 下面是我的数据类的外观 data class MyModel( var timeStamp: Date, constructor(): this(Calendar.getIn

我想保存在Firestore中创建帖子的日期,但不想使用系统时间。相反,为了准确起见,我想使用服务器时间戳。因此,我使用
FieldValue.serverTimestamp()
获取服务器时间戳,但保存该时间戳的变量的数据类型是Date。那么如何将
FieldValue.serverTimestamp()
转换为
Date

下面是我的数据类的外观

data class MyModel( var timeStamp: Date,
    constructor(): this(Calendar.getInstance().time, "")
}
PS:当我在数据类中将时间戳声明为FieldValue时,我得到以下错误:

java.lang.RuntimeException:在类上找不到要序列化的属性 com.google.firebase.firestore.FieldValue


您可以使用对象来保存此值,稍后在使用此值时检查对象的类型并使用它。据我所知,返回的数据类型很长,如果需要,必须手动将其转换为数据

代码如下所示

替换这个

data class MyModel( var timeStamp: Date,

在任何地方使用此
时间戳时,请检查其类型。
在java中,它看起来像

if (timeStamp instanceof Long) {
    // change Long to Date
    //do this
}else{
    //do something else
}

timeStamp
的值设置为
FieldValue.serverTimestamp()
本身。

您会得到以下错误:

java.lang.RuntimeException:在类com.google.firebase.firestore.FieldValue上找不到要序列化的属性

因为
FieldValue
不是一个值。您应该使用该类或扩展
Date
class的任何其他类,例如class

如何将FieldValue.serverTimestamp()强制转换为Kotlin/Java日期类

没有必要做任何造型。在Java中,甚至不需要初始化时间戳字段。要使其工作,您应该只使用注释,如我在以下帖子中的回答所述:

编辑:

在Kotlin中,您应该使用
null
值初始化构造函数中的
timeStamp
字段,如下所示:

data class MyModel(
               @ServerTimestamp
               val timeStamp: Date? = null)

谢谢你的回答,亚历克斯。我有两个后续问题1。你说我不必初始化日期。如果是这样,那么我的承包商会是什么样子。请用Kotlin的示例代码?2.在Firestore中保存帖子时,获取当前时间的最佳方法是什么。为了避免使用可能错误的客户端时间,我使用了FieldValue.serverTimestamp()。你有更好的方法吗?嗨calistus!关于第一个问题,请参阅我的最新答案。关于第二个问题,没有更好的办法。
data class MyModel(
               @ServerTimestamp
               val timeStamp: Date? = null)