如何在安卓系统中解析时间

3

Class Utils

public static String getTimeAgo(String time) {

    String time_ago = "";
    try {
        // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
        format.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date past = format.parse(time);
        Date now = new Date();
        long seconds = TimeUnit.MILLISECONDS.toSeconds(now.getTime() - past.getTime());
        long minutes = TimeUnit.MILLISECONDS.toMinutes(now.getTime() - past.getTime());
        long hours = TimeUnit.MILLISECONDS.toHours(now.getTime() - past.getTime());
        long days = TimeUnit.MILLISECONDS.toDays(now.getTime() - past.getTime());

        if (seconds < 60) {
            time_ago = seconds + " seconds ago";
        } else if (minutes < 60) {
            time_ago = seconds + " minutes ago";
        } else if (hours < 24) {
            time_ago = hours + " hours ago";
        } else {
            time_ago = days + " days ago";
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return time_ago;
}

模型

public class History{
.....
String mTime;

public String getTime() {
return Utils.getTimeAgo(mTime);

}

public void setTime(String mTime) {
this.mTime = mTime;
}
}

这是在适配器中的getView

@Override
public View getView(final int position, View view, final ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.item_history, null);
    holder = new ViewHolder();
    holder.mTvTitle = (TextView) view.findViewById(R.id.text_title);
    holder.mTvMediaName = (TextView) view.findViewById(R.id.text_mediaName);
    holder.mTvTime = (TextView) view.findViewById(R.id.text_time);
    holder.mImageUrl = (ImageView) view.findViewById(R.id.image_url);
    view.setTag(holder);
} else {
    holder = (ViewHolder) view.getTag();
}
final History history = mListHistory.get(position);
holder.mTvTitle.setText(history.getTitle());
holder.mTvMediaName.setText(history.getMediaName());
holder.mTvTime.setText(history.getTime());
holder.mImageUrl.setImageResource(android.R.color.transparent);
Picasso.with(mContext).load(history.getImageUrl())
        //.fit().centerInside()
        .into(holder.mImageUrl);

return view;
}

我设置了一个字符串时间变量:time = "2016-01-24T16:00:00.000Z";

holder.mTvTime.setText(history.getTime()); 没有显示任何值。

这是一个bug:

java.text.ParseException: Unparseable date: "43 days ago" (at offset 2)

2
从您的日期格式中删除 Z。 - Vivek Mishra
https://dev59.com/d2zXa4cB1Zd3GeqPPxRe - AL.
什么是000Z?请帮帮我! - Ha Nguyen
这种形式的额外评论“请帮帮我!”并不能帮助你。没有人会更快或更好地回答问题。 - Nick Cox
@HaNguyen mTime的日期格式是什么? - K Neeraj Lal
显示剩余2条评论
2个回答

0

T 用于将日期与时间分离。Z 表示“Zulu 时间”(UTC)。

要解析此日期格式,请尝试使用以下格式,

try {
        Date now = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
        format.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date past = format.parse("2016-01-24T16:00:00.000Z");
        DebugTool.logD("TIMEEE " + now.getTime());
        DebugTool.logD("TIMEEE PAST" + past.getTime());
   } catch (ParseException e) {
        e.printStackTrace();
   }

请参考this SO线程获取更多信息。

0
只需替换这一行
 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

带着

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());

或者

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());

@HaNguyen 好的,那我来帮你。你能展示一下当前的 mTime 是多少吗? - Shree Krishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接