查看: 515|回复: 0

[手机开发] Android 仿微信聊天时间格式化显示功能

发表于 2017-8-1 08:00:04

本文给大家分享android仿微信聊天时间格式化显示功能。

在同一年的显示规则:

如果是当天显示格式为 HH:mm 例:14:45

如果是昨天,显示格式为 昨天 HH:mm 例:昨天 13:12

如果是在同一周 显示格式为 周一 HH:mm 例:周一14:05

如果不是同一周则显示格式为 M月d日 早上或者其它 HH:mm 例: 2月5日 早上10:10

不在同一年的显示规则:

显示格式为 yyyy年M月d日 晚上或者其它 HH:mm 例:2016年2月5日 晚上18:05

代码中如果有误,请留言。

代码实现如下:

  1. import Java.text.SimpleDateFormat;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. public class Test {
  5. public static void main(String[] args) {
  6. System.out.println("当前时间:"+new SimpleDateFormat("yyyy/M/d HH:mm:ss").format(System.currentTimeMillis()));
  7. System.out.println("2016/2/1 05:05:00 显示为:"+getNewChatTime(1454666700000l));
  8. System.out.println("2017/2/1 05:05:00 显示为:"+getNewChatTime(1485983100000l));
  9. System.out.println("2017/2/4 12:05:00 显示为:"+getNewChatTime(1486181100000l));
  10. System.out.println("2017/2/5 10:10:00 显示为:"+getNewChatTime(1486260600000l));
  11. System.out.println("2017/2/5 13:12:00 显示为:"+getNewChatTime(1486271520000l));
  12. System.out.println("2017/2/6 14:05:00 显示为:"+getNewChatTime(1486361100000l));
  13. /*运行结果:
  14. 当前时间:2017/2/9 14:36:36
  15. 2016/2/1 05:05:00 显示为:2016年2月5日 晚上18:05
  16. 2017/2/1 05:05:00 显示为:2月2日 凌晨05:05
  17. 2017/2/4 12:05:00 显示为:2月4日 中午12:05
  18. 2017/2/5 13:12:00 显示为:2月5日 早上10:10
  19. 2017/2/5 13:12:00 显示为:2月5日 下午13:12
  20. 2017/2/6 14:05:00 显示为:周一14:05*/
  21. }
  22. /**
  23. * 时间戳格式转换
  24. */
  25. static String dayNames[] = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
  26. public static String getNewChatTime(long timesamp) {
  27. String result = "";
  28. Calendar todayCalendar = Calendar.getInstance();
  29. Calendar otherCalendar = Calendar.getInstance();
  30. otherCalendar.setTimeInMillis(timesamp);
  31. String timeFormat="M月d日 HH:mm";
  32. String yearTimeFormat="yyyy年M月d日 HH:mm";
  33. String am_pm="";
  34. int hour=otherCalendar.get(Calendar.HOUR_OF_DAY);
  35. if(hour>=0&&hour<6){
  36. am_pm="凌晨";
  37. }else if(hour>=6&&hour<12){
  38. am_pm="早上";
  39. }else if(hour==12){
  40. am_pm="中午";
  41. }else if(hour>12&&hour<18){
  42. am_pm="下午";
  43. }else if(hour>=18){
  44. am_pm="晚上";
  45. }
  46. timeFormat="M月d日 "+ am_pm +"HH:mm";
  47. yearTimeFormat="yyyy年M月d日 "+ am_pm +"HH:mm";
  48. boolean yearTemp = todayCalendar.get(Calendar.YEAR)==otherCalendar.get(Calendar.YEAR);
  49. if(yearTemp){
  50. int todayMonth=todayCalendar.get(Calendar.MONTH);
  51. int otherMonth=otherCalendar.get(Calendar.MONTH);
  52. if(todayMonth==otherMonth){//表示是同一个月
  53. int temp=todayCalendar.get(Calendar.DATE)-otherCalendar.get(Calendar.DATE);
  54. switch (temp) {
  55. case 0:
  56. result = getHourAndMin(timesamp);
  57. break;
  58. case 1:
  59. result = "昨天 " + getHourAndMin(timesamp);
  60. break;
  61. case 2:
  62. case 3:
  63. case 4:
  64. case 5:
  65. case 6:
  66. int dayOfMonth = otherCalendar.get(Calendar.WEEK_OF_MONTH);
  67. int todayOfMonth=todayCalendar.get(Calendar.WEEK_OF_MONTH);
  68. if(dayOfMonth==todayOfMonth){//表示是同一周
  69. int dayOfWeek=otherCalendar.get(Calendar.DAY_OF_WEEK);
  70. if(dayOfWeek!=1){//判断当前是不是星期日 如想显示为:周日 12:09 可去掉此判断
  71. result = dayNames[otherCalendar.get(Calendar.DAY_OF_WEEK)-1] + getHourAndMin(timesamp);
  72. }else{
  73. result = getTime(timesamp,timeFormat);
  74. }
  75. }else{
  76. result = getTime(timesamp,timeFormat);
  77. }
  78. break;
  79. default:
  80. result = getTime(timesamp,timeFormat);
  81. break;
  82. }
  83. }else{
  84. result = getTime(timesamp,timeFormat);
  85. }
  86. }else{
  87. result=getYearTime(timesamp,yearTimeFormat);
  88. }
  89. return result;
  90. }
  91. /**
  92. * 当天的显示时间格式
  93. * @param time
  94. * @return
  95. */
  96. public static String getHourAndMin(long time) {
  97. SimpleDateFormat format = new SimpleDateFormat("HH:mm");
  98. return format.format(new Date(time));
  99. }
  100. /**
  101. * 不同一周的显示时间格式
  102. * @param time
  103. * @param timeFormat
  104. * @return
  105. */
  106. public static String getTime(long time,String timeFormat) {
  107. SimpleDateFormat format = new SimpleDateFormat(timeFormat);
  108. return format.format(new Date(time));
  109. }
  110. /**
  111. * 不同年的显示时间格式
  112. * @param time
  113. * @param yearTimeFormat
  114. * @return
  115. */
  116. public static String getYearTime(long time,String yearTimeFormat) {
  117. SimpleDateFormat format = new SimpleDateFormat(yearTimeFormat);
  118. return format.format(new Date(time));
  119. }
  120. }
复制代码

以上所述是小编给大家介绍的Android 仿微信聊天时间格式化显示功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对程序员之家网站的支持!



回复

使用道具 举报