I use this code to add the date and time to the post of the user who wrote it:

import java.text.SimpleDateFormat; import java.util.Date; public class Message { //поле private String text; public String date = new SimpleDateFormat("dd.MM.yyyy").format(new Date()); public String time = new SimpleDateFormat("HH.mm.ss").format(new Date()); //пустой конструктор (необходим для работы базы данных) public Message() { } //Конструктор используемый нами public Message(String text) { this.text = text; setText(date + " в " + time + "\n" + this.text +"\n"); } //геттер public String getText() { return text; } //сеттер public void setText(String text) { this.text = text; } } 

enter image description here

How to make it so that the time being sent is server time, not what the user has on the device. Otherwise, it turns out that the time of the messages is shown not quite correct, because everyone is in different time zones, etc.

PS: main activation code:

 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import com.google.firebase.database.ChildEventListener; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { //1. Пользовательский интерфейс (UI) private ListView mMessageListView; private EditText mMessageEditText; private Button mSendButton; private MessageAdapter mMessageAdapter; //2. Firebase private FirebaseDatabase mFirebaseDatabase; private DatabaseReference mMessageDatabaseReference; private ChildEventListener mChildEventListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 3. Связываем UI mMessageListView = (ListView) findViewById(R.id.messageListView); mMessageEditText = (EditText) findViewById(R.id.messageEditText); mSendButton = (Button) findViewById(R.id.sendButton); // 4. Инициализируем Firebase mFirebaseDatabase = FirebaseDatabase.getInstance(); mMessageDatabaseReference = mFirebaseDatabase.getReference().child("messages"); // 5. Создаем слушатель базы данных if (mChildEventListener == null) { mChildEventListener = new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Message message = dataSnapshot.getValue(Message.class); mMessageAdapter.add(message); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }; // 6. Устанавливаем слушатель базы данных mMessageDatabaseReference.addChildEventListener(mChildEventListener); } // 7. Создаем лист где мы будем хранить сообщение List<Message> messages = new ArrayList<>(); // 8. Создаем и устанавливаем адаптер для сообщений mMessageAdapter = new MessageAdapter(this, R.layout.item_message, messages); mMessageListView.setAdapter(mMessageAdapter); // 9. Устанавливаем слушатель клика на кнопку, создаем сообщение, отправляем сообщение в базу, удаляем текст mSendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Message message = new Message(mMessageEditText.getText().toString()); mMessageDatabaseReference.push().setValue(message); mMessageEditText.setText(""); } }); // *Устанавливаем слушатель текста mMessageEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { if (charSequence.toString().trim().length() > 0) { mSendButton.setEnabled(true); } else { mSendButton.setEnabled(false); } } @Override public void afterTextChanged(Editable editable) { } }); } // 10.Удаляем слушатель базы данных @Override protected void onDestroy() { if (mChildEventListener != null) { mMessageDatabaseReference.removeEventListener(mChildEventListener); mChildEventListener = null; super.onDestroy(); } } 

}

    1 answer 1

    So after all the user needs to see the time of sending the message, which corresponds to his time zone.

    One solution is to keep the server time in UTC. Let the server, when receiving a message, set its time for it (timestamp at UTC), and return it to the sender as a response. The client always, having received the message history or the incoming message, converts from UTC-0 to its own time zone.

    Then on the server time will be one, and clients will display the same time in their time zone.

    • and how is it done? Chat runs on Firebase - Anton
    • There will not tell. Implemented the server with my own hands. But, as far as I know, Firebase has the ability to add developer code, expanding the functionality. - Vladimir Parfenov
    • I just understand something about what is being said .. One needs to somehow take a single server time from somewhere, let's say at the time of sending the message get the time “22:10” and add it to the message. And now I’ve logged in to the chat from two phones, and in the history of messages I see two messages sent at the same time, displaying different times as a result .. - Anton
    • time a single should expose the server, and the client shows his time until the server has responded to the send. If the server will set the time and distribute it to customers, then everything will be the same - Vladimir Parfenov
    • I don't even have to convert something to my time zone. it will be enough to make it so that it will always be Moscow. regardless of the time the user has in the phone and behind the "window" - Anton