当前位置: 首页 > news >正文

Android记录19-朋友圈动态发布时间计算

注意这里要+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, for
mat);

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工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
ateStr, DATE_FORMAT);

}

效果类似这种:

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-GTxnfQDo-1719020918715)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

相关文章:

  • 事件传播机制 与 责任链模式
  • Matlab 入门学习
  • .net core使用EPPlus设置Excel的页眉和页脚
  • G7易流赋能化工物流,实现安全、环保与效率的共赢
  • Java延迟初始化Logger日志对象
  • 【C++11 之nullptr关键字 用以消除空指针和0歧义】基础知识必须了解
  • 【Python教程】压缩PDF文件大小
  • Vue3中的常见组件通信之`provide`、`inject`
  • webkit 的介绍
  • 大模型网信办备案全网最详细说明(付附件)
  • Docker部署Nginx1.21.5(保姆级图文教程)
  • Mybatis框架的缓存
  • Excel导出实例
  • rust内存分配,内存回收,内存泄露
  • 联华集团:IT团队如何实现从成本中心提升至价值中心|OceanBase 《DB大咖说》(十)
  • @angular/forms 源码解析之双向绑定
  • Angular 4.x 动态创建组件
  • Django 博客开发教程 8 - 博客文章详情页
  • httpie使用详解
  • js继承的实现方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • ViewService——一种保证客户端与服务端同步的方法
  • 搭建gitbook 和 访问权限认证
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前端之React实战:创建跨平台的项目架构
  • 试着探索高并发下的系统架构面貌
  • 由插件封装引出的一丢丢思考
  • 主流的CSS水平和垂直居中技术大全
  • #微信小程序:微信小程序常见的配置传值
  • (1)(1.13) SiK无线电高级配置(五)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C11) 泛型表达式
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十八)三元表达式和列表解析
  • (四)stm32之通信协议
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (转)一些感悟
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework .NET Core与 .NET 的区别
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /var/lib/dpkg/lock 锁定问题
  • @ConditionalOnProperty注解使用说明
  • @private @protected @public
  • @RequestBody与@ResponseBody的使用
  • @RestControllerAdvice异常统一处理类失效原因