Chciałem uzyskać aktualną sygnaturę czasową bazy ogniowej, nie mogąc znaleźć sposobu na jej zdobycie. Chcę zapisać dziecko, jak pokazano na obrazku. I do tego muszę uzyskać znacznik czasu i odpowiednio ustawić datę. Proszę o pomoc ...Jak uzyskać bieżący znacznik czasu serwera Firebase w milisekundach?
Odpowiedz
Można ustawić czas serwera za pomocą ServerValue.TIMESTAMP
który jest Map<String, String>
typ z {".sv" : "timestamp"}
pary. Gdy zostanie przesłany do bazy danych bazy danych, zostanie przekonwertowany na długi Unix epoch time podobny do tego 1469554720
.
Problem polega na tym, że nie można ustawić tego bezpośrednio jako klucza. Najlepszym sposobem jest umieszczenie znacznika czasu wewnątrz obiektu i użycie DatabaseReference.push()
, aby uzyskać gwarantowany unikalny klucz.
Na przykład
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
String key = ref.push().getKey(); // this will create a new unique key
Map<String, Object> value = new HashMap<>();
value.put("name", "shesh");
value.put("address", "lucknow");
value.put("timestamp", ServerValue.TIMESTAMP);
ref.child(key).setValue(value);
Jeśli chcesz zapisać go z tego formatu (dd-mm-rrrr), istnieje hack, ale nie jest to zalecane. Najpierw należy go zapisać (ServerValue.TIMESTAMP) do innego tymczasowego węzła, a następnie pobrać znacznik czasu, zanim zostanie przekonwertowany na ten format przy użyciu klasy Date
.
dziękuję bardzo .. Próbowałem tego i działa dobrze. Ja też mogę to zrobić. Ale czy znowu można użyć tej ServerValue.TIMESTAMP jako klucza? –
Nie ma za co. Myślę, że jest to możliwe, ale będą dwie wywołania API, ustaw najpierw wartość TIMESTAMP, a następnie uzyskaj ostatni klucz za pomocą 'Query.limitToLast (1);', nie jest to zalecane, ponieważ istnieje prawdopodobieństwo, że dwóch użytkowników wstawiło dwa TIMESTAMPy w tym samym czasie, więc nie możesz uzyskać właściwego klucza. BTW, proszę oznaczyć moją odpowiedź jako zaakceptowaną, jeśli tak uważasz. :) – Wilik
czy chcesz ustawić czas serwera jako klucz o tym formacie (dd-mm-rrrr)? – Wilik
@wilik. Tak, dokładnie –