2017-08-30 8 views
0

ここでは、2つの日付を比較してメッセージの上に日付を表​​示しています。私は各項目で日付を表示する場合、それは正常に動作します。私がTodayと表示しようとすると、Yesterdaydateは常にdateと表示されます。ここで日付は間違っていませんが、日付の書式設定に間違っています。RecyclerViewアダプタに間違った日付を表示

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(); 
    } 

私は日付または日でTextViewを示すためのロジックを使用していますが、以下に言及されています。私が何か間違っていると私に知らせてください。

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"); 
     } 

    } 
} 

答えて

2

これら<,>,<=,>=,==,!=の演算子を使用して比較したり、このlink

.afterをチェックしMillisにあなたの日付を変換しようとは、私はどのように私達ができる、他の開発者に見せたいここで日付を

+1

これは良いアプローチです。私は、.before関数を使用してコードスニペットも改善しました。 –

2

を比較するために使用されますwhatsappアプリケーションのようなメッセージが表示される前の日を表示します。

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(""); 
     } 
    } 


} 
関連する問題