Android 一个把时间转换成类似“几天前”一类模糊时间的类

一个把时间转换成类似“几天前”一类模糊时间的类,比如说:2008-01-01对于2015-9-10来说就是8年前。

直接上代码:

package com.lxm.fuzzydatetimeformatter;

import android.content.Context;
import android.content.res.Resources;

import java.util.Calendar;
import java.util.Date;

/**
 * Created by Administrator on 2015/9/9.
 */
public class FuzzyDateTimeFormatter {
    private final static int SECONDS = 1;
    private final static int MINUTES = 60 * SECONDS;
    private final static int HOURS   = 60 * MINUTES;
    private final static int DAYS    = 24 * HOURS;
    private final static int WEEKS   =  7 * DAYS;
    private final static int MONTHS  =  4 * WEEKS;
    private final static int YEARS   = 12 * MONTHS;

    /**
     * Returns a properly formatted fuzzy string representing time ago
     * @param context   Context
     * @param date      Absolute date of the event
     * @return          Formatted string
     */
    public static String getTimeAgo(Context context, Date date) {
        int beforeSeconds = (int) (date.getTime() / 1000);
        int nowSeconds = (int) (Calendar.getInstance().getTimeInMillis() / 1000);
        int timeDifference = nowSeconds - beforeSeconds;

        Resources res = context.getResources();

        if (timeDifference < MINUTES) {
            return res.getQuantityString(R.plurals.fuzzydatetime__seconds_ago, timeDifference, timeDifference);
        } else if (timeDifference < HOURS) {
            return res.getQuantityString(R.plurals.fuzzydatetime__minutes_ago, timeDifference / MINUTES, timeDifference / MINUTES);
        } else if (timeDifference < DAYS) {
            return res.getQuantityString(R.plurals.fuzzydatetime__hours_ago, timeDifference / HOURS, timeDifference / HOURS);
        } else if (timeDifference < WEEKS) {
            return res.getQuantityString(R.plurals.fuzzydatetime__days_ago, timeDifference / DAYS, timeDifference / DAYS);
        } else if (timeDifference < MONTHS) {
            return res.getQuantityString(R.plurals.fuzzydatetime__weeks_ago, timeDifference / WEEKS, timeDifference / WEEKS);
        } else if (timeDifference < YEARS) {
            return res.getQuantityString(R.plurals.fuzzydatetime__months_ago, timeDifference / MONTHS, timeDifference / MONTHS);
        } else {
            return res.getQuantityString(R.plurals.fuzzydatetime__years_ago, timeDifference / YEARS, timeDifference / YEARS);
        }

    }

}
调用:

package com.lxm.fuzzydatetimeformatter;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
    private EditText editText ;
    private TextView mTv;
    private Button mBtm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.id_edittext);
        mTv = (TextView) findViewById(R.id.id_tv);
        mBtm = (Button) findViewById(R.id.id_btn);
        mBtm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(editText.getText().toString());
                    String str = FuzzyDateTimeFormatter.getTimeAgo(MainActivity.this,date);
                    mTv.setText(str);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        });

    }
}
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/id_edittext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入不能大于今天的日期(格式2008-01-01)" />

    <Button
        android:id="@+id/id_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="把时间转换距离今天模糊时间,成类似于几天前"/>
    <TextView
        android:id="@+id/id_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>


strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">FuzzyDateTimeDemo</string>

    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <plurals name="fuzzydatetime__seconds_ago">
        <item quantity="one">%d 秒前</item>
        <item quantity="other">%d 秒前</item>
    </plurals>
    <plurals name="fuzzydatetime__minutes_ago">
        <item quantity="one">%d 分钟前</item>
        <item quantity="other">%d 分钟前</item>
    </plurals>
    <plurals name="fuzzydatetime__hours_ago">
        <item quantity="one">%d 小时前</item>
        <item quantity="other">%d 小时前</item>
    </plurals>
    <plurals name="fuzzydatetime__days_ago">
        <item quantity="one">%d 天前</item>
        <item quantity="other">%d 天前</item>
    </plurals>
    <plurals name="fuzzydatetime__weeks_ago">
        <item quantity="one">%d 周前</item>
        <item quantity="other">%d 周前</item>
    </plurals>
    <plurals name="fuzzydatetime__months_ago">
        <item quantity="one">%d 月前</item>
        <item quantity="other">%d 月前</item>
    </plurals>
    <plurals name="fuzzydatetime__years_ago">
        <item quantity="one">%d 年前</item>
        <item quantity="other">%d 年前</item>
    </plurals>
</resources>
参考文档:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0822/3351.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值