2017-11-12 17 views
2

私は、EditTextとDateTimePickerダイアログを使ってfirestoreデータベースに日付を保存しようとしていました。問題は、日付がサーバー上に文字列として格納されることです。 FieldValue.serverTimestamp()を使用すると、サーバーのタイムスタンプがフィールドに保存されますが、DateTimePickerダイアログから返された日付をタイムスタンプとして保存します。アンドロイドEditTextとDateTimePickerダイアログを使用してfirestoreにタイムスタンプを保存する方法

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); 
     } 
    }); 

日を文字列として保存されつつある。

Date Stored as String

答えて

4

、あなたの場合には、タイムスタンプ としてDateオブジェクトを保存することができ、あなたは、日付オブジェクトに文字列を解析し、フィールドとして直接保存することができますたとえば、次のようなことが可能です: -

最初に:有効な日付文字列を日付オブジェクトに変換してください

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 ; 
    } 

} 

はその後

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文書にフィールドとして日付オブジェクトを保存します。

日付がfirestore文書にタイムスタンプとして保存されます上記のコードを実行する場合

enter image description here

関連する問題