0

Here I'm showing date above messages after comparison two dates. If I show dates with each item it works fine. but when I'm trying to show Today, Yesterday and date its always showing date only. Here date is not wrong, but its something getting wrong on formatting date.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss");
    try {
        Date current_itemDate = simpleDateFormat.parse(chatMessage.getDateTime());

        DateFormat outputFormat = new SimpleDateFormat("hh:mm a");
        Date date = simpleDateFormat.parse(chatMessage.getDateTime());
        holder.timeTextView.setText(outputFormat.format(date));
        long previousTs = 0;
        if (position > 0) {
            ChatMessage pm = chatMessages.get(position - 1);
            previousTs = simpleDateFormat.parse(pm.getDateTime()).getTime();
        }
        setTimeTextVisibility(current_itemDate.getTime(), previousTs, holder.textViewTimePeriod,
                holder.dividerTop);

    } catch (ParseException e) {
        e.printStackTrace();
    }

I'm using the logic for showing TextView with dates or days is mentioned below. Please let me know if I'm doing something wrong.

 private void setTimeTextVisibility(long now_tm, long msg_tm, TextView timeText, View dividerTop) {
    Calendar now_calendar = Calendar.getInstance();
    Calendar msg_calendar = Calendar.getInstance();
    now_calendar.setTimeInMillis(now_tm);
    msg_calendar.setTimeInMillis(msg_tm);
    boolean sameDay = now_calendar.get(Calendar.YEAR) == msg_calendar.get(Calendar.YEAR) &&
            now_calendar.get(Calendar.MONTH) == msg_calendar.get(Calendar.MONTH)
            && now_calendar.get(Calendar.DAY_OF_MONTH) == msg_calendar.get(Calendar.DAY_OF_MONTH);
    if (msg_tm == 0) {
        timeText.setVisibility(View.VISIBLE);
        dividerTop.setVisibility(View.VISIBLE);
        if (now_calendar.get(Calendar.DATE) == msg_calendar.get(Calendar.DATE)) {
            timeText.setText("Today");
        } else if (!sameDay) {
            timeText.setText("Yesterday");
        } else {
            timeText.setText("" + new SimpleDateFormat("dd MMM, yyyy").format(new Date(now_tm)));
        }
    } else {
        if (sameDay) {
            timeText.setVisibility(View.GONE);
            dividerTop.setVisibility(View.GONE);
            timeText.setText("");
        } else {
            timeText.setVisibility(View.VISIBLE);
            dividerTop.setVisibility(View.VISIBLE);
            timeText.setText("Today");
        }

    }
}
double-beep
  • 5,031
  • 17
  • 33
  • 41
Anshul Tyagi
  • 2,076
  • 4
  • 34
  • 65

2 Answers2

3

Try to convert your date into Millis and then compare using these <,>,<=,>=,==,!= operators or check this link

.after is used to comparing the dates

Shaifali Rajput
  • 1,279
  • 12
  • 30
2

Here I want to show other developers how we can display the day before the messages like whatsapp application does.

 private void setTimeTextVisibility(long now_tm, long msg_tm, TextView timeText, View dividerTop) {
    Date nowDate = new Date();
    nowDate.setTime(now_tm);
    Date msgDate = new Date();
    msgDate.setTime(msg_tm);
    Calendar now_calendar = Calendar.getInstance();
    now_calendar.setTimeInMillis(now_tm);
    Calendar now = Calendar.getInstance();
    Calendar msg_calendar = Calendar.getInstance();
    msg_calendar.setTimeInMillis(msg_tm);
    if (msg_tm == 0) {
        timeText.setVisibility(View.VISIBLE);
        dividerTop.setVisibility(View.VISIBLE);
        if (DateUtils.isToday(now_calendar.getTimeInMillis())) {
            timeText.setText("Today");
        } else if (now.get(Calendar.DATE) - now_calendar.get(Calendar.DATE) == 1) {
            timeText.setText("Yesterday");
        } else
            timeText.setText("" + new SimpleDateFormat("dd MMM, yyyy").format(new Date(now_tm)));
    } else {
        if (msgDate.before(nowDate)) {

            boolean sameDay = now_calendar.get(Calendar.YEAR) == msg_calendar.get(Calendar.YEAR) &&
                    now_calendar.get(Calendar.MONTH) == msg_calendar.get(Calendar.MONTH)
                    && now_calendar.get(Calendar.DAY_OF_MONTH) == msg_calendar.get(Calendar.DAY_OF_MONTH);
            Log.e("YESTERDAY", (now.get(Calendar.DATE) - msg_calendar.get(Calendar.DATE) == 1) + "");
            if (sameDay) {
                timeText.setVisibility(View.GONE);
                dividerTop.setVisibility(View.GONE);
                timeText.setText("");
            } else {
                timeText.setVisibility(View.VISIBLE);
                dividerTop.setVisibility(View.VISIBLE);
                if (DateUtils.isToday(now_calendar.getTimeInMillis())) {
                    timeText.setText("Today");
                } else if (now.get(Calendar.DATE) - now_calendar.get(Calendar.DATE) == 1) {
                    timeText.setText("Yesterday");
                } else {
                    timeText.setText("" + new SimpleDateFormat("dd MMM, yyyy").format(new Date(now_tm)));
                }
            }
        } else {
            timeText.setVisibility(View.GONE);
            dividerTop.setVisibility(View.GONE);
            timeText.setText("");
        }
    }


}
Anshul Tyagi
  • 2,076
  • 4
  • 34
  • 65