版权声明:本文为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的更多相关文章

  1. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

  2. java日期处理总结(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzUAAAG1CAIAAABPoU1KAAAgAElEQVR4nOy9e1xU1d747znP9/V9nu

  3. java日期详解

    [TOC] 一.简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的地位比如joda. 文章主要对java日期处理的详解,用1.8可以不用joda. 1. 相关概念 首先 ...

  4. Java 日期处理类库Joda-Time简介

    http://www.ibm.com/developerworks/cn/java/j-jodatime.html 登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 搜索 devel ...

  5. 全面解析Java日期时间API

    时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time ...

  6. react-native DatePicker日期选择组件的实现

    本教程的实现效果如下: 为了实现其淡入/淡出的覆盖效果, 还有取消按钮, 在此用了一个三方的组件, 大家可以先安装一下: 三方组件的地址:https://github.com/eyaleizenber ...

  7. [转]Java日期时间使用总结

    原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...

  8. java日期操作大全

    摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http ...

  9. java中解决组件重叠的问题(例如鼠标移动组件时)

    java中解决组件覆盖的问题!     有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序) ...

随机推荐

  1. WFS服务查询方法

    基于Geoserver发布的wfs服务,实现空间和属性信息的查询.wfs包含getFeature操作,用来检索要素信息,支持返回gml格式的地理要素表达. WFS的getFeature操作需要提供的参 ...

  2. Gradle-任务

    任务结果标签 当 Gradle 执行一个任务时,它会在控制台和 Tooling API 根据任务结果给任务打标签. 这些标签是根据任务是否有操作,是否应该执行操作,是否执行了操作以及这些操作做了哪些改 ...

  3. PuppeteerSharp读取页面完整HTML(.NetCore)

    1.使用NUGET安装PuppeteerSharp 通过工具或者命令方式安装 2.初始化浏览器 await new BrowserFetcher().DownloadAsync(BrowserFetc ...

  4. openwrt_在PPPOE上网的同时_访问光猫

    openwrt_在PPPOE上网的同时_访问光猫 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-14. 参考文章: 光猫桥接模式下,通过路由器访问光猫.简单设置 设置Open ...

  5. Vue之循环遍历Json数据,填充Table表格

    简单记一次Vue循环遍历Json数据,然后填充到Table表格中,展示到前端的代码: async getData(id) { const res = await this.$store.api.new ...

  6. Maven pom.xml文件深度学习

    本文介绍Maven项目构建中,pom.xml文件的生成规则和常用节点的使用方法.pom.xml官方网址:http://maven.apache.org/pom.html pom简介 pom作为项目对象 ...

  7. Python高级特性——切片(Slice)

    摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >>> L[0],L[1],L[2] (' ...

  8. C# 网络编程之简易聊天示例

    还记得刚刚开始接触编程开发时,傻傻的将网站开发和网络编程混为一谈,常常因分不清楚而引为笑柄.后来勉强分清楚,又因为各种各样的协议端口之类的名词而倍感神秘,所以为了揭开网络编程的神秘面纱,本文尝试以一个 ...

  9. ribbon客户端负载均衡

    Ribbon简介 参考:https://blog.csdn.net/chengqiuming/article/details/80711168 Ribbon是Netflix发布的负载均衡器,它有助于控 ...

  10. 大数据基础--R语言(刘鹏《大数据》课后习题答案)

    1.R语言是解释性语言还是编译性语言?   解释性语言 2.简述R语言的基本功能.   R语言是一套完整的数据处理.计算和制图软件系统,主要包括以下功能: (1)数据存储和处理功能,丰富的数据读取与存 ...