спасибо, я обновляю свой ответ, чтобы добавить некоторые выводы, ваш ответ поможет мне понять

аюсь установить эпоху, когда данные создаются в Firestore. Я рассчитываю получить некоторый результат, аналогичный тому, что делается в базе данных в реальном времени, используяServerValue.TIMESTAMP.

Я не хочу устанавливать его, используя время устройстваSystem.getCurrentMillis потому что это время может быть изменено пользователем.

Согласно сдокументы необходимо сделать обновление, проблема с форматом. Это мой код:

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

И это результат в веб-консоли Firebase:

Я был очень удивлен, что это по-испански, что может быть полезно в некоторых ситуациях, но я гонюсь за эпохой. Попытайтесь увидеть светлую сторону, придерживайтесь ее и подумали, что я вижу сеть на испанском, поэтому я изменил язык в селекторе нижнего колонтитула, он не изменился. На данный момент я предполагаю, что установлен на языке проекта.

Вернемся к попытке эпохи. Учитывая, что в моем проекте также используется база данных в реальном времени, я пытаюсь настроить ее следующим образом:

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

Он загрузил что-то, но это была чепуха.

Я думаю, что использование epoch в качестве метки времени на стороне сервера является лучшим стандартным подходом, после этого каждый клиент может преобразовать его в удобство и локаль пользователя.

Может ли эпоха быть установлена ​​в качестве значения сервера в Firestore?

ОБНОВИТЬ

Ответ, помеченный как правильный, привел меня к некоторым интересным выводам, которыми я хотел бы поделиться, поэтому другие в той же ситуации могут извлечь выгоду из:

Нет необходимости устанавливать эпоху из-заFieldValue.serverTimestamp() это объект даты, обрабатываемый базой данных, и то, что мы видим в консоли, это просто удобный способ показать это.посколькуFieldValue.serverTimestamp() является объектом даты, его можно отсортировать, как и любую другую временную метку, если добавитьorderBy("timestamp", Query.Direction.DESCENDING) на ваш запрос (илиQuery.Direction.ASCENDING) он будет сортировать результаты правильно.И что касается комментария @ 34m0, это правильно, клиенты не должны заботиться о логике для установки времени создания, но это должно быть сделано в функциях.
 34m020 окт. 2017 г., 18:43
Вы можете просто найти это значение на клиенте, как предложил Даг, или вы можете использовать для этого облачные функции.
 cutiko21 окт. 2017 г., 15:39
@ 34m0 Я об этом, просто сообщаю, что я обновил свой вопрос

Ответы на вопрос(1)

Решение Вопроса

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());
        }
    }
});
 cutiko21 окт. 2017 г., 16:28
спасибо, я обновляю свой ответ, чтобы добавить некоторые выводы, ваш ответ поможет мне понять

Ваш ответ на вопрос