Java日期处理组件joda-time
版权声明:本文为xing_star原创文章,转载请注明出处!
本文同步自http://javaexception.com/archives/175
Java日期处理组件joda-time
平常在开发过程中,处理日期时间,基本上会使用SimpleDateFormat来处理,用这个也还行,不过有时候想找个强力点的工具类,关于时间日期处理的,我期望的是,对于给定的时间戳或者是一串字符串的时间格式,能够有强大的Api,可以方便的帮我解析出年月日,时分秒,此外也可以知道这个时间戳对应的是这一年的第多少天,这个月的多少天等等。经过一番调研,发现Java的第三方框架中,有一个joda-time,这个日期处理组件对时间日期解析做了增强,功能真的很强大,这里推荐给大家使用。
从16年到现在,这个组件我在很多个项目中使用。接下来用一个常见的需求场景,展示joda-time的部分用法。
如下图所示,我想要实现图中的时间展示效果,下午6:47,晚上9:09,上午11:48等

完整的代码如下:
public static String getTimeString2(String time) {
long timeMills = Long.parseLong(time);
DateTime dateTime = new DateTime(timeMills);
int hourOfDay = dateTime.getHourOfDay();
int hourOfDayOf12 = hourOfDay;
int minute = dateTime.getMinuteOfHour();
String extra = "";
if (hourOfDay == 0) {
extra = "凌晨";
hourOfDayOf12 = 12;
} else if (hourOfDay > 0 && hourOfDay < 12) {
extra = "上午";
} else if (hourOfDay >=12 && hourOfDay < 13) {
extra = "中午";
} else if (hourOfDay > 13 && hourOfDay <= 18) {
extra = "下午";
hourOfDayOf12 = hourOfDay - 12;
} else if (hourOfDay > 18 && hourOfDay <= 23) {
extra = "晚上";
hourOfDayOf12 = hourOfDay - 12;
}
String prefixMinute = "";
if (minute < 10) {
prefixMinute = "0";
}
return extra + hourOfDayOf12 + ":" + prefixMinute + minute;
}
joda-time中,常用的Api是DateTime,一般情况下,我们可以将long类型的时间戳传入DateTime的构造方法,之后就可以通过DateTiem的对象获取到各种关于日期时间的值
dateTime.getHourOfDay();//当天几点
dateTime.getMinuteOfHour();//这个小时内的分钟数
dateTime.getYear();//哪一年
dateTime.getMonthOfYear();//月份
dateTime.getDayOfMonth();//这个月的几号
dateTime.getDayOfYear();//这一年的第几天
DateTime.now().getDayOfYear();//获取当天是这一年的第几天
接着再看另外一个图片的效果,这个图片展示的效果,我期望的是显示具体的年月日,还有昨天,以及如果是当天的话,展示当天的上午中午下午具体时间。

完整的代码如下:
public static String getTimeString(String time) {
long timeMills = Long.parseLong(time);
DateTime dateTime = new DateTime(timeMills);
int year = dateTime.getYear();
int month = dateTime.getMonthOfYear();
int dayOfMonth = dateTime.getDayOfMonth();
int dayOfYear = dateTime.getDayOfYear();
int nowDayOfYear = DateTime.now().getDayOfYear();
if (dayOfYear <= nowDayOfYear) {
if (dayOfYear == nowDayOfYear) {
return getTimeString2(time);
} else if (nowDayOfYear - dayOfYear == 1) {
return "昨天";
} else {
return year + "/" + month + "/" + dayOfMonth;
}
}
return year + "/" + month + "/" + dayOfMonth;
}
这里面关于判断是否是今天的判断用的就是
dateTime.getDayOfYear()
if(dateTime.getDayOfYear() == DateTime.now().getDayOfYear());//表示就是今天
对于joda-time,还有很多其他的Api没有介绍,这个就等有需求场景的时候在去研究吧,joda-time对于字符串的时间解析也很强力。这个可以大家去研究。
Github项目地址
https://github.com/JodaOrg/joda-time
Java日期处理组件joda-time的更多相关文章
- 一文告诉你Java日期时间API到底有多烂
前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...
- java日期处理总结(二)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzUAAAG1CAIAAABPoU1KAAAgAElEQVR4nOy9e1xU1d747znP9/V9nu
- java日期详解
[TOC] 一.简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的地位比如joda. 文章主要对java日期处理的详解,用1.8可以不用joda. 1. 相关概念 首先 ...
- Java 日期处理类库Joda-Time简介
http://www.ibm.com/developerworks/cn/java/j-jodatime.html 登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 搜索 devel ...
- 全面解析Java日期时间API
时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time ...
- react-native DatePicker日期选择组件的实现
本教程的实现效果如下: 为了实现其淡入/淡出的覆盖效果, 还有取消按钮, 在此用了一个三方的组件, 大家可以先安装一下: 三方组件的地址:https://github.com/eyaleizenber ...
- [转]Java日期时间使用总结
原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- java中解决组件重叠的问题(例如鼠标移动组件时)
java中解决组件覆盖的问题! 有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序) ...
随机推荐
- WFS服务查询方法
基于Geoserver发布的wfs服务,实现空间和属性信息的查询.wfs包含getFeature操作,用来检索要素信息,支持返回gml格式的地理要素表达. WFS的getFeature操作需要提供的参 ...
- Gradle-任务
任务结果标签 当 Gradle 执行一个任务时,它会在控制台和 Tooling API 根据任务结果给任务打标签. 这些标签是根据任务是否有操作,是否应该执行操作,是否执行了操作以及这些操作做了哪些改 ...
- PuppeteerSharp读取页面完整HTML(.NetCore)
1.使用NUGET安装PuppeteerSharp 通过工具或者命令方式安装 2.初始化浏览器 await new BrowserFetcher().DownloadAsync(BrowserFetc ...
- openwrt_在PPPOE上网的同时_访问光猫
openwrt_在PPPOE上网的同时_访问光猫 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-14. 参考文章: 光猫桥接模式下,通过路由器访问光猫.简单设置 设置Open ...
- Vue之循环遍历Json数据,填充Table表格
简单记一次Vue循环遍历Json数据,然后填充到Table表格中,展示到前端的代码: async getData(id) { const res = await this.$store.api.new ...
- Maven pom.xml文件深度学习
本文介绍Maven项目构建中,pom.xml文件的生成规则和常用节点的使用方法.pom.xml官方网址:http://maven.apache.org/pom.html pom简介 pom作为项目对象 ...
- Python高级特性——切片(Slice)
摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >>> L[0],L[1],L[2] (' ...
- C# 网络编程之简易聊天示例
还记得刚刚开始接触编程开发时,傻傻的将网站开发和网络编程混为一谈,常常因分不清楚而引为笑柄.后来勉强分清楚,又因为各种各样的协议端口之类的名词而倍感神秘,所以为了揭开网络编程的神秘面纱,本文尝试以一个 ...
- ribbon客户端负载均衡
Ribbon简介 参考:https://blog.csdn.net/chengqiuming/article/details/80711168 Ribbon是Netflix发布的负载均衡器,它有助于控 ...
- 大数据基础--R语言(刘鹏《大数据》课后习题答案)
1.R语言是解释性语言还是编译性语言? 解释性语言 2.简述R语言的基本功能. R语言是一套完整的数据处理.计算和制图软件系统,主要包括以下功能: (1)数据存储和处理功能,丰富的数据读取与存 ...