Android,正确编程日期时间的正确方式

时间:2016-10-04 14:16:45

标签: android datetime time android-date

示例,从1分钟前开始 我使用Api服务的api和时间响应结果:

{
  "date_time":"2016-03-10 03:20:30"
}

请逐步讨论,如果可以的话,如何以阿拉伯语格式编程显示它 منذ15دقيقة

列表视图适配器中的日期代码

 TextView date_time = (TextView) convertView.findViewById(R.id.date_time_list_home);
 date_time.setText(m.dateTime());

1 个答案:

答案 0 :(得分:1)

首先,对于Android上的任何日期/时间操作,我强烈建议您使用ThreeTenABP库。这是Java 8 java.time.*包的后端,避开了令人失望的java.util.Datejava.util.Calendar类。

要使用此库解析"date_time",您可以使用以下代码:

// I set the ZoneId to systemDefault, but you should really use the ZoneId of the server
DateTimeFormatter formatter = DateTimeFormatter
                                  .ofPattern("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
                                  .withZone(ZoneId.systemDefault()); 

Instant instant = formatter.parse(m.dateTime(), Instant.FROM);

Android提供DateUtils类来显示日期和时间信息。此课程考虑了Locale和12/24小时格式等系统设置。因此,如果设备的Locale设置为任何阿拉伯语区域设置(ar_),则日期/时间将以适合其的格式显示。

String display = DateUtils.getRelativeTimeSpanString(
                        instant.toEpochMilli(),
                        Instant.now().toEpochMilli(),
                        DateUtils.MINUTE_IN_MILLIS);

date_time.setText(display);

getRelativeTimeSpanString中的最后一个参数是最低分辨率,因此设置DateUtils.MINUTE_IN_MILLIS不会显示以秒为单位的差异。

如果您坚持使用Java 7类,则​​使用它们的代码相同:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse(m.dateTime());

String display = DateUtils.getRelativeTimeSpanString(
                        date.getTime(),
                        new Date(),
                        DateUtils.MINUTE_IN_MILLIS);

date_time.setText(display);

如果您需要"过渡解决方案"超过一天(即您希望显示过去一天以上的日期/时间为" ...天前和#34;)您可以使用DateUtils.getRelativeDateTimeString()方法代替:

String display = DateUtils.getRelativeDateTimeString(
                        mContext,
                        instant.toEpochMilli(),
                        DateUtils.MINUTE_IN_MILLIS,
                        DateUtils.WEEK_IN_MILLIS,
                        DateUtils.FORMAT_ABBREV_ALL);

任何比transitionResolution更远的日期(在这种情况下,一周)将以适当的日期格式显示,而不是相对格式。 minResolutiontransitionResolution可以是任意long值,DateUtils包含其他方便的常量,例如MONTH_IN_MILLISYEAR_IN_MILLIS

最后一个参数采用整数来格式化标志。这些标志会覆盖DateUtils为每个Locale使用的默认格式;查看文档以获取更多信息。