如何将日期和时间字符串转换为时间以前的类型?

时间:2019-04-06 19:37:26

标签: java android firebase

我也是Firebase和android的新手。 在我的应用程序中,学生可以分享他的有关课程提纲的问答。 为此,我在firebase数据库中设置了时间时间和日期字符串,并通过POJO类以String格式检索了日期和时间,例如Date:06-April-2019和time:01:38:24。 直到现在我通过model.getTime和model.getDate在TextView中使用setText。 所以这就像一个更新(TextView)2019年4月6日01:38:24 现在我想像分钟前,小时前,天前,月前,一年前一样,通过Timeago对其进行更改

对不起,英语不好。 和thanx提前

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 :(得分:0)

使用System.currentTimeMillis();您可以获得自1970年1月1日以来经过的毫秒数。

因此,您可以通过适配器中的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());
        }

祝你好运,告诉我是否有效。