Android 仿微信聊天时间格式化显示功能

本文给大家分享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

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

代码实现如下:

import Java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test {
public static void main(String[] args) {
  System.out.println("当前时间:"+new SimpleDateFormat("yyyy/M/d HH:mm:ss").format(System.currentTimeMillis()));
  System.out.println("2016/2/1 05:05:00 显示为:"+getNewChatTime(1454666700000l));
  System.out.println("2017/2/1 05:05:00 显示为:"+getNewChatTime(1485983100000l));
  System.out.println("2017/2/4 12:05:00 显示为:"+getNewChatTime(1486181100000l));
  System.out.println("2017/2/5 10:10:00 显示为:"+getNewChatTime(1486260600000l));
  System.out.println("2017/2/5 13:12:00 显示为:"+getNewChatTime(1486271520000l));
  System.out.println("2017/2/6 14:05:00 显示为:"+getNewChatTime(1486361100000l));
  /*运行结果:
  当前时间:2017/2/9 14:36:36
  2016/2/1 05:05:00 显示为:2016年2月5日 晚上18:05
  2017/2/1 05:05:00 显示为:2月2日 凌晨05:05
  2017/2/4 12:05:00 显示为:2月4日 中午12:05
  2017/2/5 13:12:00 显示为:2月5日 早上10:10
  2017/2/5 13:12:00 显示为:2月5日 下午13:12
  2017/2/6 14:05:00 显示为:周一14:05*/
}
/**
 * 时间戳格式转换
 */
static String dayNames[] = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
public static String getNewChatTime(long timesamp) {
  String result = "";
  Calendar todayCalendar = Calendar.getInstance();
  Calendar otherCalendar = Calendar.getInstance();
  otherCalendar.setTimeInMillis(timesamp);
  String timeFormat="M月d日 HH:mm";
  String yearTimeFormat="yyyy年M月d日 HH:mm";
  String am_pm="";
  int hour=otherCalendar.get(Calendar.HOUR_OF_DAY);
  if(hour>=0&&hour<6){
    am_pm="凌晨";
  }else if(hour>=6&&hour<12){
    am_pm="早上";
  }else if(hour==12){
    am_pm="中午";
  }else if(hour>12&&hour<18){
    am_pm="下午";
  }else if(hour>=18){
    am_pm="晚上";
  }
  timeFormat="M月d日 "+ am_pm +"HH:mm";
  yearTimeFormat="yyyy年M月d日 "+ am_pm +"HH:mm";
  boolean yearTemp = todayCalendar.get(Calendar.YEAR)==otherCalendar.get(Calendar.YEAR);
  if(yearTemp){
    int todayMonth=todayCalendar.get(Calendar.MONTH);
    int otherMonth=otherCalendar.get(Calendar.MONTH);
    if(todayMonth==otherMonth){//表示是同一个月
      int temp=todayCalendar.get(Calendar.DATE)-otherCalendar.get(Calendar.DATE);
      switch (temp) {
      case 0:
        result = getHourAndMin(timesamp);
        break;
      case 1:
        result = "昨天 " + getHourAndMin(timesamp);
        break;
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
        int dayOfMonth = otherCalendar.get(Calendar.WEEK_OF_MONTH);
        int todayOfMonth=todayCalendar.get(Calendar.WEEK_OF_MONTH);
        if(dayOfMonth==todayOfMonth){//表示是同一周
          int dayOfWeek=otherCalendar.get(Calendar.DAY_OF_WEEK);
          if(dayOfWeek!=1){//判断当前是不是星期日   如想显示为:周日 12:09 可去掉此判断
            result = dayNames[otherCalendar.get(Calendar.DAY_OF_WEEK)-1] + getHourAndMin(timesamp);
          }else{
            result = getTime(timesamp,timeFormat);
          }
        }else{
          result = getTime(timesamp,timeFormat);
        }
        break;
      default:
        result = getTime(timesamp,timeFormat);
        break;
      }
    }else{
      result = getTime(timesamp,timeFormat);
    }
  }else{
    result=getYearTime(timesamp,yearTimeFormat);
  }
  return result;
}
/**
 * 当天的显示时间格式
 * @param time
 * @return
 */
public static String getHourAndMin(long time) {
  SimpleDateFormat format = new SimpleDateFormat("HH:mm");
  return format.format(new Date(time));
}
/**
 * 不同一周的显示时间格式
 * @param time
 * @param timeFormat
 * @return
 */
public static String getTime(long time,String timeFormat) {
  SimpleDateFormat format = new SimpleDateFormat(timeFormat);
  return format.format(new Date(time));
}
/**
 * 不同年的显示时间格式
 * @param time
 * @param yearTimeFormat
 * @return
 */
public static String getYearTime(long time,String yearTimeFormat) {
  SimpleDateFormat format = new SimpleDateFormat(yearTimeFormat);
  return format.format(new Date(time));
}
}

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

时间: 2017-02-07

Android 动态的显示时间

怎么才能动态的实现时间呢?也许刚入行的你不懂.如果不懂得话,请看代码(代码是最好的老师).大笑 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView=(TextView) findViewById(R.id.time); handler = new Handler() { public void ha

Android开发之时间日期操作实例

相信对于手机的时间日期设置大家一定都不陌生吧,今天举一个关于时间日期设置的示例,其中有些许不完善之处,例如如何使设置的时间日期和手机系统同步等.感兴趣的读者可以根据自身经验加以完善. 现来看看具体示例,希望对大家有所帮助. 首先是时间设置: .java文件(MainActivity.java)代码如下: package com.example.activity_time_date; import java.util.Calendar; import android.app.Activity; i

Android调用系统时间格式显示时间信息

使用如下方法: 复制代码 代码如下: java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context); dateFormat = android.text.format.DateFormat.getTimeFormat(context.getApplicationContext());

android获取时间差的方法

本文实例讲述了android获取时间差的方法.分享给大家供大家参考.具体分析如下: 有些时候我们需要获取当前时间和某个时间之间的时间差,这时如何获取呢? 1. 引用如下命名空间: import java.util.Date; import android.text.format.DateFormat; 2. 设置时间格式: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3. 获取时间: Date c

Android获取通话时间实例分析

本文章总结了一段Android获取通话时间程序代码,有需要的朋友可参考一下. 我们知道安卓系统中通话时长应该是归Callog管,所以建议去查查ContactProvider,或者是TelephonyProvider Service测试 可以的通话开始的时候启动Service 记录当前时间A, 然后stopSelf(); 另外在通话结束的时候再次启动一下Service,再次获得当前时间B, 然后把时间A和B进行比较处理 String time = Long.toString(比较后处理的时间) 然

探讨:如何修改Android超时休眠时间

默认情况下,Android系统在超过N分钟没操作,会自动关屏并进入休眠状态. 实际上,有些项目要求超时不休眠,如果只是针对单个应用程序,我们可以通过电源管理设置状态来实现,而如果要设置所有应用的超时时间,则可以参考以下方法: 方法一.调整代码:Settings.System.putInt(getContentResolver(),android.provider.Settings.System.SCREEN_OFF_TIMEOUT,-1);权限:<uses-permission android:

Android获取系统时间以及网络时间

项目开发中,很多时候会用到android的时间,罗列一下获取的时间的方式,和大家共同学习进步 一.获取系统时间  1.通过Calendar类来获取系统当前的时间 Calendar calendar = Calendar.getInstance(); long unixTime = calendar.getTimeInMillis();//这是时间戳 Logger.i(TAG,"calendar--->>>"+"当前时间为:" + calendar.

Android处理时间各种方法汇总

本文实例为大家分享了Android处理时间的各种方法,供大家参考,具体内容如下 /** * 获取当前时间 * * @return 当前时间 */ public static String getdate() { SimpleDateFormat formatter = new SimpleDateFormat("HH:mm"); Date curDate = new Date(System.currentTimeMillis());// 获取当前时间 String time = for

解析android中系统日期时间的获取

复制代码 代码如下: import    java.text.SimpleDateFormat; SimpleDateFormat    formatter    =   new    SimpleDateFormat    ("yyyy年MM月dd日    HH:mm:ss     ");     Date    curDate    =   new    Date(System.currentTimeMillis());//获取当前时间     String    str    =

Android中日期与时间设置控件用法实例

本文实例讲述了Android中日期与时间设置控件用法.分享给大家供大家参考.具体如下: 1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码: 页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextView控件,用于显示设置后的系统时间 main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x

Android中Spinner(下拉框)控件的使用详解

android给我们提供了一个spinner控件,这个控件主要就是一个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍一遍吧. Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器.Spinner是View类得一个子类. 1.效果图 2.创建页面文件(main.xml) <Spinner android:id="@+id/spinner1" and

Python中PyQt5/PySide2的按钮控件使用实例

在之前的文章中,我们介绍了PyQt5和PySide2中主窗口控件MainWindow的使用.窗口控件的4中基础布局管理.从本篇开始,我们来了解一下PyQt5和PySide2中基础控件的使用,其中包括: 按钮控件: 文本输入控件: 单选控件: 文本标签控件: 多选控件: 列表控件: 等图形界面开发中常用的控件,今天我们来介绍按钮控件. 文章目录 直接实例化一个带文本的按钮控件 不带参数创建的按钮控件 三.获取按钮控件的点击事件 一.创建一个按钮控件 在PyQt5/PySide2中,按钮控件名为QP

Android开发之TextView控件用法实例总结

本文实例总结了Android开发之TextView控件用法.分享给大家供大家参考,具体如下: TextView控件可以向用户展现文本信息,我们可以设置该文本信息是否能编辑 1.TextView基本使用 在程序中创建TextView对象 在xml文件中布局使用 2.New Android Project-> Project name:TextView Build Target:Android 2.2 Application name:TextViewDemo Package name:com.b5

Android编程开发之Spinner控件用法实例分析

本文实例讲述了Android编程开发之Spinner控件用法.分享给大家供大家参考,具体如下: 下拉列表 Spinner,Spinner是一个每次只能选择所有项的一个项的控件.它的项来自于与之相关联的适配器中. Spinner的使用,可以极大提高用户的体验性.当需要用户选择的时候,可以提供一个下拉列表将所有可选的项列出来.供用户选择. 一.使用数组作为数据源 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/ap

Android开发之TimePicker控件用法实例详解

本文实例分析了Android开发之TimePicker控件用法.分享给大家供大家参考,具体如下: 新建项目: New Android Project-> Project name:HelloSpinner Build Target:Android 2.2 Application name:HelloSpinner Package name:com.b510 Create Activity:MainActivity Min SDK Version:9 Finish 运行效果: 如果: return

Android编程之Button控件用法实例分析

本文实例讲述了Android编程之Button控件用法.分享给大家供大家参考,具体如下: 一.Button概述 android.widget.Button直接继承于android.wdiget.TextView. 直接子类有:CompoundButton. 间接子类有:CheckBox,RadioButton,Switch,ToggleButton. Button类表示一个"按钮"控件."按钮"控件可以被用户按下或者点击,来触发另一个操作. 二.Button的用法

Android Service控件用法实例分析

本文实例讲述了Android Service控件用法.分享给大家供大家参考,具体如下: 1.Service是一个应用程序的组件 2.Service没有图形化界面 3.用来处理耗时比较长的功能(下载.播放MP3) 4.更新ContentProvider.Intent以及系统的启动 Servcie不是一个单独的进程,不是一个线程 定义一个Service比较简单,只要继承Service类,实现其生命周期的方法即可.一个定义好的Service必须在AndroidManifest.xml文件中通过<ser

Android编程实现图片放大缩小功能ZoomControls控件用法实例

本文实例讲述了Android编程实现图片放大缩小功能ZoomControls控件用法.分享给大家供大家参考,具体如下: MainActivity代码: package example.com.myapplication; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import

ASP.NET中repeater控件用法实例

本文实例讲述了ASP.NET中repeater控件用法.分享给大家供大家参考.具体实现方法如下: repeater绑定数据: 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) {         if(!IsPostBack)             BindStudent(); } private void BindStudent() {         string str = ConfigurationManag