Как преобразовать строку даты и времени в тип времени назад? - PullRequest
0 голосов
/ 06 апреля 2019

Я новичок в Firebase и Android также. В моем приложении студенты могут поделиться своим вопросом и ответить о программе. Для этого я устанавливаю время и строку даты в базе данных firebase, а с помощью класса POJO извлекаю дату и время в формате String, например, Date: 06-April-2019 и time: 01: 38: 24. До сих пор я использовал setText в TextView от model.getTime и model.getDate. Так что это как обновление (TextView) 06-April-2019 01:38:24 теперь я хочу изменить его по Timeago, как минуту назад, час назад, день назад, месяц назад, год назад

Извините за плохой английский. и спасибо заранее

protected void onBindViewHolder(@NonNull  UserViewHolder holder, int position, @NonNull final question model)
        {

final String PostKey=getRef(position).getKey();//get key by this line

        holder.userfullname.setText(model.getFirstname()+" "+model.getLastname());
        holder.time.setText(" "+model.getTime());//***TextView 06-April-2019*** 
        holder.date.setText(" "+model.getDate());//*TextView 01:38:24*
        holder.description.setText(model.getDescription());
        }

1 Ответ

0 голосов
/ 06 апреля 2019

С System.currentTimeMillis (); Вы получите миллисекунды, которые они прошли с 1 января 1970 года.

Так что же мы можем достичь с помощью еще 2 пользовательских функций в вашем адаптере.

Первый из них принимает дату и время и переводит их в миллисекунды.

private long millisFromDateAndTime(String date, String time){
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMMM-yyyy");
        SimpleDateFormat timeFormat = new SimpleDateFormat("kk:mm:ss");
        try
        {
            Date mDate = dateFormat.parse(date);
            Date mTime = timeFormat.parse(time);
            long dateInMilliseconds = mDate.getTime();
            long timeInMilliseconds = mTime.getTime();
            return timeInMilliseconds + dateInMilliseconds;
        }
        catch (ParseException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return 0;
    }

Вторая функция берет эти миллисекунды с момента создания сообщения и возвращает строку, содержащую, сколько времени назад это было.

private String timeAgo(long startTime){
        long currentTime = System.currentTimeMillis();
        long timeDifference = (currentTime - startTime) / 1000;
        Log.d("!!!!DIFF!!!!!!", String.valueOf(timeDifference));
        long timeUnit;

        if(timeDifference < 60){
            timeUnit = DateUtils.SECOND_IN_MILLIS;
        } else if(timeDifference < 3600){
            timeUnit = DateUtils.MINUTE_IN_MILLIS;
        } else if (timeDifference < 86400){
            timeUnit = DateUtils.HOUR_IN_MILLIS;
        }else if (timeDifference < 31536000){
            timeUnit = DateUtils.DAY_IN_MILLIS;
        } else {
            timeUnit = DateUtils.YEAR_IN_MILLIS;
        }

        CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(startTime, currentTime,
                timeUnit, DateUtils.FORMAT_ABBREV_RELATIVE);

        return String.valueOf(timeAgo);
    }

Вы можете поместить эти две функции внизу вашего адаптера.

Наконец, вы будете использовать эту функцию в onBindViewholder.

protected void onBindViewHolder(@NonNull  UserViewHolder holder, int position, @NonNull final question model)
        {

final String PostKey=getRef(position).getKey();//get key by this line

        holder.userfullname.setText(model.getFirstname()+" "+model.getLastname());
        //Convert your Date and Time to milliseconds
        long startTime = millisFromDateAndTime(model.getDate(), model.getTime);
        //Set the timeAgo text in the Textview of your choice
        holder.time.setText(timeAgo(startTime));
        holder.description.setText(model.getDescription());
        }

Удачи, скажите, сработало ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...