Android开发记录19-朋友圈动态发布时间计算
转载请注明:IT_xiao小巫,http://blog.csdn.net/wwj_748
这里要大家去了解的几个重要的类:
日历类:Calendar
日期类:Date
日期格式类:SimpleDateFormat
基本上我们对日期的一些转换都是在这几个类中进行的,有以下几个常用的转换:
Date与Calendar之间的转换
Date与日期字符串的互相转换
首先我们来看如何使用Calendar来获取我们想要的日期信息:
获取当前日历:
Calendar calendar = Calendar.getInstance();
根据字段来获取信息
获取当前年份:
Calendar.getInstance().get(Calendar.YEAR)
获取当前月:
Calendar.getInstance().get(Calendar.MONTH) + 1
注意这里要+1,因为月份是从0开始的。
获取当前月的第几天:
calendar.get(Calendar.DAY_OF_MONTH)
获取当前时间毫秒显示:
calendar.getTimeInMillis()
Calendar还可以做很多一些运算,笔者在开发日历控件的时候,就做了很多关于日期的运算:
通过Calendar的add方法来对指定字段进行运算,举例如下:
// 获取去年的年份
public static int getLastYear() {
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -1);
return c.get(Calendar.YEAR);
}
// 获取下一年年份
public static int getNextYear() {
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, 1);
return c.get(Calendar.YEAR);
}
// 获取上一个月的月份
public static int getLastMonth() {
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1);
return c.get(Calendar.MONTH) + 1;
}
// 获取下一个月的月份
public static int getNextMonth() {
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 1);
return c.get(Calendar.MONTH) + 1;
}
关于Calendar还有很多字段,希望读者查看API自己去尝试。
Date与Calendar之间的转换
我们可以通过调用Calendar的setTime方法来设置时间所对应的日历对象
calendar.setTime(new Date())
Date与日期字符串的互相转换
在实际开发中,我们经常需要对服务端返回的日期数据进行格式化,这里就需要用到SimleDateFormat,我们可以指定日期格式:
private static SimpleDateFormat DATE_FORMAT_TILL_SECOND = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
我们得到一个日期字符串,可以将其转换为Date对象:
/**
* 日期字符串转换为Date
* @param dateStr
* @param format
* @return
*/
public static Date strToDate(String dateStr, String format) {
Date date = null;
if (!TextUtils.isEmpty(dateStr)) {
DateFormat df = new SimpleDateFormat(format);
try {
date = df.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
也可以将我们获取的Date对象转换为指定格式的字符串:
/**
* 日期转换为字符串
* @param timeStr
* @param format
* @return
*/
public static String dateToString(String timeStr, String format) {
// 判断是否是今年
Date date = DateHelper.strToDate(timeStr, format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 如果是今年的话,才去“xx月xx日”日期格式
if (calendar.get(Calendar.YEAR) == getYear()) {
return DATE_FORMAT_TILL_DAY_CURRENT_YEAR.format(date);
}
return DATE_FORMAT_TILL_DAY_CH.format(date);
}
最后要说的就是,开发中我们需要计算一条动态的发布时间,一般我们得到的是一条日期字符串,我们需要计算当前时间和动态的发布时间,计算它们的差值来判断发布在什么时候,上代码:
/**
* 日期逻辑
* @param dateStr 日期字符串
* @return
*/
public static String timeLogic(String dateStr) {
Calendar calendar = Calendar.getInstance();
calendar.get(Calendar.DAY_OF_MONTH);
long now = calendar.getTimeInMillis();
Date date = strToDate(dateStr, DATE_FORMAT);
calendar.setTime(date);
long past = calendar.getTimeInMillis();
// 相差的秒数
long time = (now - past) / 1000;
StringBuffer sb = new StringBuffer();
if (time > 0 && time < 60) { // 1小时内
return sb.append(time + "秒前").toString();
} else if (time > 60 && time < 3600) {
return sb.append(time / 60+"分钟前").toString();
} else if (time >= 3600 && time < 3600 * 24) {
return sb.append(time / 3600 +"小时前").toString();
}else if (time >= 3600 * 24 && time < 3600 * 48) {
return sb.append("昨天").toString();
}else if (time >= 3600 * 48 && time < 3600 * 72) {
return sb.append("前天").toString();
}else if (time >= 3600 * 72) {
return dateToString(dateStr, DATE_FORMAT);
}
return dateToString(dateStr, DATE_FORMAT);
}
效果类似这种:
本文的记录到这里,这里提一点,开发中我们经常遇到的一些知识点是可以整理和总结的,移动的产品开发是需要快递迭代的,对这些开发知识点的记录对自己有很大的帮助,提升你自己的开发效率,对应的你的能力就提升了,薪资也会跟着往上升,小巫个人的一点观点,感谢你的耐心阅读。
分享到:
相关推荐
android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...
标题中的"android-sdk-4.2.2 android-sdk-4.2.2-platforms"指的是Android SDK的一个特定版本,即Android 4.2.2(API级别17),该版本的SDK平台组件。这个版本是Android操作系统的 Jelly Bean 版本的一部分,发布于...
标题中的“android-sdk-windows-1.5_r3.zip-tools”表明这是一个针对Windows平台的Android SDK的早期版本,具体为1.5_r3。这个压缩包包含的是SDK中的“tools”目录,里面通常装有用于Android应用开发和设备管理的...
一款针对android平台下的图片选择器,支持从相册或拍照选择图片或视频、音频,支持动态权限获取、裁剪(单图or多图裁剪)、压缩、主题自定义配置等功能、适配android 6.0 系统的开源图片选择框架。
ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar 要是需要最新的,下载地址: http://code.google.com/p/ksoap2-android/
在Android开发中,仿微信朋友圈动态列表是一种常见的需求,它涉及到UI设计、数据绑定和滚动优化等多个技术点。本项目名为"MyDemo",显然提供了一个实现这一功能的示例代码。接下来,我们将深入探讨其中涉及的关键...
"android-gif-drawable" 是一个专门为 Android 平台设计的开源组件,它使得在 Android 应用中轻松处理和展示 GIF 动态图变得轻而易举。这个库的目的是提供一个高效且功能丰富的解决方案,以替代系统默认对 GIF 支持...
当描述中提到"将android-18解压到Android\android-sdk\platforms下"时,这意味着你需要下载并安装Android 4.3(API级别18)的SDK平台,以便在开发环境中使用。 1. **API级别18**:每个Android版本都有一个对应的API...
高版本的android-support-v4包
android-x86-4.0-RC2-eeepc.iso 用于安装测试机中使用.
Android 19,也被称为KitKat,是Google在2013年发布的Android操作系统的一个重要版本。这个版本的源码包对于开发者来说是一份宝贵的资源,因为它揭示了系统的内部工作原理,提供了对底层代码的完全访问,使得开发者...
关于利用android-serialport-api实现在安卓设备上进行串口通信,附精简版demo,亲测可用。符个人博文说明:http://blog.csdn.net/ckw474404603/article/details/37811499
permission android:name="android.permission.RECORD_AUDIO" />`,而播放则需要`<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />`(针对Android 6.0及以上版本,还需要动态请求权限...
在Android平台上,微信朋友圈动态界面的设计与实现是一个典型的移动端UI设计和开发案例,涉及到许多关键技术和组件。这个界面不仅展示了用户分享的内容,还允许其他用户点赞、评论,并且当点击“全部评论”后,可以...
强大的网络请求库,主要特征如下: 处理异步Http请求,并通过匿名内部类处理回调结果 Http请求均位于非UI线程,...通过线程池处理并发请求 处理文件上传、下载 响应结果自动打包JSON格式 自动处理连接断开时请求重连
Android-SerialPort-API是专门为Android平台设计的一个串口通信库,它提供了简单易用的接口,使得开发者可以方便地与串行端口设备进行数据交互。本文将深入探讨这一API的使用方法及其核心知识点。 一、Android串口...
在Android中,我们可以使用ImageView或者更强大的GestureImageView(如ThirdParty库:android-gesture-imageview)来处理手势识别和图片缩放。 1. **ImageView设置**: - 使用`ScaleType`属性来调整图片的显示方式...
android-support-v13.jar
本项目"android-async-http-master"提供了这个类库的源码,方便开发者深入理解和定制。 `AsyncHttpClient`库的主要特点是其异步特性,它能够在后台线程中执行HTTP请求,避免了主线程被阻塞,从而提高了用户体验。在...