2017-10-20 61 views
4

我試圖設置曆元公司的FireStore創建數據時,設定的FireStore時代。我正在使用ServerValue.TIMESTAMP來獲得與實時數據庫中的結果類似的結果。如何使用服務器時

我不想通過使用設備時間System.getCurrentMillis來設置它,因爲用戶可以更改該時間。

根據docs的更新需要做的,與問題的格式。這是我的代碼:

Map<String, Object> map = new HashMap<>(); 
map.put("timestamp", FieldValue.serverTimestamp()); 
reference.update(map); 

這是結果在火力地堡Web控制檯:

enter image description here

我很驚訝它是在西班牙,這可能是在某些情況下,但時代有用是我追逐的。嘗試看到明亮的一面,並堅持下去,並認爲我看到了西班牙語網頁,所以我改變了頁腳選擇器的語言,它沒有改變。在這一點上,我假設在項目語言中設置。

回到劃時代的嘗試。考慮到我的項目是使用實時數據庫,以及,我嘗試設置它以這種方式:

Map<String, Object> map = new HashMap<>(); 
map.put("timestamp", ServerValue.TIMESTAMP); 
reference.update(map); 

它確實上傳的東西,但它只是無稽之談。

enter image description here

我想用劃時代的服務器端的時間戳是一個更好的標準方法,以後每個客戶端都可以將其轉化爲用戶帶來方便和語言環境。

能否時代被設定爲公司的FireStore服務器值?

UPDATE

答案標記爲正確引導我一些,我想和大家分享有趣的發現,讓其他人在同樣的情況可以受益於:

  • 沒有必要由於FieldValue.serverTimestamp()是由數據庫處理的日期對象,所以我們在控制檯中看到的只是一種友好的方式來顯示它。
  • 由於FieldValue.serverTimestamp()是一個日期對象,它可以按照任何其他時間戳進行排序,如果您將orderBy("timestamp", Query.Direction.DESCENDING)添加到您的查詢(或Query.Direction.ASCENDING)它將正確排序結果。
  • 和關於所涉及的@ 34m0評論,這是正確的,客戶不應該照顧邏輯的設置創建或更新的時間,但它應該在函數來完成,特別是考慮更新需要在完成客戶端設置值。相反在執行寫入時,它可以直接設置實時數據庫是如何實現的,在公司的FireStore它可以通過使用Map整個對象來完成,但打破POJO目的。
+1

你可以只找到客戶端道格對價值建議,或者你可以考慮使用雲功能。 – 34m0

+1

@ 34m0我在此,只是讓你知道我已經更新我的問題 – cutiko

回答

9

設置Firestore字段的結果爲FieldValue.serverTimestamp()的對象是java.util.Date的實例。當您稍後閱讀該值時,可以使用getTime()獲得曆元時間。

舉個例子,像這樣創建的文檔:

Map<String, Object> doc = new HashMap<>(); 
doc.put("timestamp", FieldValue.serverTimestamp()); 

結果值可以這樣寫:

docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { 
    @Override 
    public void onComplete(@NonNull Task<DocumentSnapshot> task) { 
     if (task.isSuccessful()) { 
      DocumentSnapshot snapshot = task.getResult(); 
      if (snapshot != null) { 
       Map<String,Object> map = snapshot.getData(); 
       Date date = (Date) map.get("timestamp"); 
       Log.d(TAG, "date=" + date); 
       Log.d(TAG, "time=" + date.getTime()); 
      } else { 
       Log.d(TAG, "No such document"); 
      } 
     } else { 
      Log.d(TAG, "get() failed with ", task.getException()); 
     } 
    } 
}); 
+0

謝謝,我正在更新我的答案,添加一些調查結果,你的回覆幫助我的數字 – cutiko