【问题标题】:How to parse time in android如何在android中解析时间
【发布时间】:2016-06-22 00:28:03
【问题描述】:

类实用程序

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

这是 Adapter 中的 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;
}

我设置 String time = "2016-01-24T16:00:00.000Z";

holder.mTvTime.setText(history.getTime());不显示值

这是错误:

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

【问题讨论】:

  • 从日期格式中删除 Z
  • 000Z 是什么?帮帮我!
  • 我有问题。我在下面发布问题。请。帮帮我!
  • 我更新了我的问题。请。帮帮我!

标签: android datetime time


【解决方案1】:

T 用于分隔日期和时间。 Z 表示“祖鲁时间”(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线程。

【讨论】:

    【解决方案2】:

    只需替换这一行

     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是什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2011-07-26
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多