如何使用 android EditText 和 DateTimePicker 对话框在 firestore 上存储时间戳

How to store timestamp on firestore using android EditText and DateTimePicker Dialog

我试图使用 EditText 和 DateTimePicker 对话框将日期保存在 firestore 数据库中。问题是,日期在服务器上存储为字符串。如果我使用 FieldValue.serverTimestamp() 它只会在字段中保存服务器时间戳,但我想将 DateTimePicker 对话框返回的日期保存为时间戳。

FirebaseFirestore db2 = FirebaseFirestore.getInstance();
Map<String, Object> addAnimal = new HashMap<>();
addAnimal.put("dob", editText.getText());
db.collection("users").document("animals")
    .set(addAnimal)
    .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.d(TAG, "DocumentSnapshot successfully written!");
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.w(TAG, "Error writing document", e);
        }
    });

日期存储为字符串:

您可以将日期对象保存为时间戳 在你的情况下,你可以将字符串解析为日期对象并将其直接保存为 firestore 文档中的字段,例如你可以这样做:-

首先:将有效的日期字符串转换为日期对象

static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
public Date getDateFromString(String datetoSaved){

   try {
       Date date = format.parse(datetoSaved);
       return date ;
   } catch (ParseException e){
       return null ;
   }

}

然后将日期对象保存为 firestore 文档中的字段

public void savetoDatabase(){

    FirebaseFirestore db = FirebaseFirestore.getInstance();

    Map<String,Object> addAnimal = new HashMap<>();
    addAnimal.put("dob",getDateFromString("2017-10-15T09:27:37Z")); 

    db.collection("users").document("animals").set(addAnimal);

}

您可以选择任何其他格式以获取更多信息,请查看如何解析日期以及 java.util.Date 对象的工作原理。

如果您运行上述代码,日期将在 firestore 文档中保存为时间戳